当前位置: 首页 > news >正文

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践

1. 实践案例需求描述

查询mysql数据库,按每5分钟分组获取3个小时内的电量数据,参考SQL语句如下。

select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from
((SELECT CONCAT(DATE_FORMAT(RecordTime,'%Y-%m-%d %H:'), LPAD(floor(MINUTE(RecordTime)/5)*5,2,'0')) RecordTime,
sum(case when EquipmentId='db_sddb1' then ThisPower else 0 end) sddl, 
sum(case when EquipmentId='db_syfd1' then ThisPower else 0 end) pvdl
FROM electricitymeter_history
where RecordTime > date_sub(str_to_date('2023-11-06 00', '%Y-%m-%d %H'), interval 3 hour)
group by CONCAT(DATE_FORMAT(RecordTime,'%Y-%m-%d %H:'),  LPAD(floor(MINUTE(RecordTime)/5)*5,2,'0'))) sd
left join
(SELECT CONCAT(DATE_FORMAT(RecordTime,'%Y-%m-%d %H:'), LPAD(floor(MINUTE(RecordTime)/5)*5,2,'0')) RecordTime,sum(ThisChargingCapacity) capdl
FROM storedenergy_history
WHERE 
RecordTime > date_sub(str_to_date('2023-11-06 00', '%Y-%m-%d %H'), interval 3 hour)
group by CONCAT(DATE_FORMAT(RecordTime,'%Y-%m-%d %H:'),  LPAD(floor(MINUTE(RecordTime)/5)*5,2,'0'))) cap
on sd.RecordTime = cap.RecordTime )
order by RecordTime desc

其中,5分钟间隔是这样约束的:

时间01:30:00至01:34:59的数据进行合计,时间计为01:30,时间01:35:00至01:39:59的数据进行合计,时间计计为01:35。

2. 解决方法

2.1. 间隔5分钟算法

时间 = 向下取整 ( 分钟数 5 ) × 5 时间 = 向下取整( \frac{分钟数}{5} )\times5 时间=向下取整(5分钟数)×5

select floor(MINUTE(now())/5)*5

2.2. 分类转数据列

使用case when,符合条件的取出值,不满足赋值0,例如:

sum(case when EquipmentId='db_sddb1' then ThisPower else 0 end) sddl, 
sum(case when EquipmentId='db_syfd1' then ThisPower else 0 end) pvdl

3. 主要相关mysql技术

3.1. 取整

  1. 向下取整(Floor):

使用Floor函数可以将一个数值向下取整为最接近的小于或等于该数值的整数。例如,Floor(3.8)的结果为3。

  1. 向上取整(Ceiling):

使用Ceiling函数可以将一个数值向上取整为最接近的大于或等于该数值的整数。例如,Ceiling(3.2)的结果为4。

  1. 四舍五入(Round):

使用Round函数可以将一个数值按照四舍五入的规则取整。例如,Round(3.5)的结果为4,Round(3.4)的结果为3。

  1. 截断取整(Truncate):

使用Truncate函数可以将一个数值截断为指定小数位数的整数。例如,Truncate(3.567, 2)的结果为3.56,表示将3.567截断为两位小数。

  1. 向零取整(Trunc):

使用Trunc函数可以将一个数值向零取整,即直接去掉小数部分。例如,Trunc(3.8)的结果为3,Trunc(-3.8)的结果为-3。

除了以上几种常用的取整方法外,MySQL还提供了其他一些函数来满足不同的需求,如Ceil函数用于向上取整,Div函数用于整除运算并返回整数部分,Mod函数用于取模运算并返回余数等。

3.2. 字符串补位

在 MySQL 数据库中,字符串补全位数是一种非常常见的操作。这个操作可以让你的数据更加规范化,也可以让你的代码更加清晰易懂。在本文中,我们将会介绍 MySQL 字符串补全位数的方法与技巧。

  1. 使用 LPAD() 函数

LPAD() 函数是 MySQL 中用来补全字符串的函数。

是最终字符串的长度,pad 是用来补全的字符。例如,可以使用如下的 SQL 语句:

SELECT LPAD('123',5,'0');

这个语句会返回 ‘00123’。LPAD() 函数会在字符串的左侧使用指定的字符进行补全。

  1. 使用 RPAD() 函数

除了 LPAD() 函数之外,MySQL 还提供了 RPAD() 函数。这个函数的作用和 LPAD() 函数类似,不同之处在于它是在字符串的右侧进行补全。例如,可以使用如下的 SQL 语句:

SELECT RPAD('123',5,'0');

3.3. 区分字符大小写

在mysql中,可以利用select查询语句配合binary关键字来区分大小写,select语句用于查询数据,binary关键字用于区分大小写,语法为“select * from 表名 WHERE binary 字段=字段值”。

SELECT * FROM electricitymeter_history where binary EquipmentId = 'db1';

3.4. 设置时间间隔

例如取三小时之前的时间:

select date_sub(now(), interval 3 hour)

其中的 interval 是一个时间间隔函数,用于在日期和时间上进行加减计算。它非常适合用于处理时间序列数据、执行标志和报告日期等操作。INTERVAL 可以接受的时间单位包括年(YEAR)、季度(QUARTER)、月(MONTH)、周(WEEK)、天(DAY)、时(HOUR)、分(MINUTE)、秒(SECOND)。

interval 函数的语法:

DATE_ADD(date, INTERVAL expr unit)
DATE_SUB(date, INTERVAL expr unit)

相关文章:

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践

1. 实践案例需求描述 查询mysql数据库,按每5分钟分组获取3个小时内的电量数据,参考SQL语句如下。 select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from ((SELECT CONCAT(DATE_FORMAT(RecordTime,%Y-%m-%d %H:), LPAD(floor(…...

什么是AIGC

1 定义 "AIGC"代表“人工智能生成内容”(Artificial Intelligence Generated Content),它指的是使用人工智能(AI)技术自动生成的内容,这些内容可以包括文本、图像、音乐、视频或其他多媒体形式。…...

〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…...

GitHub Universe 2023:AI 技术引领软件开发创新浪潮

GitHub 是全球领先的软件开发和协作平台,数百万开发者和企业在此分享、学习和创建卓越的软件。同时 GitHub 处在 AI 技术前沿,通过其先进的 AI 技术增强开发者体验并赋能未来软件开发的使命。在今天的文章中,我们将一起看看在 GitHub 年度大会…...

数据结构:红黑树的插入实现(C++)

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 一、红黑树二、红黑树的插入三、代码实现总结 一、红黑树 红黑树的概念: 红黑树是一颗二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色&…...

飞天使-django之数据库简介

文章目录 增删改查解决数据库不能存储中文问题创建表数据类型表的基本操作主键唯一键 unique外键实战 增删改查 四个常用的语句查询 : insert delete update select insert into student(Sno,name) values(95001,"张三") delete from student where name张三 upda…...

Flink之KeyedState

前面的文章中介绍过Operator State,这里介绍一下Keyed State. 在使用Operator State时必须要实现CheckpointFunction接口,而Keyed State则不需要,在使用keyBy(...)分组分组后,调用的函数必须是实现RichFuntion接口的函数才可以使用Keyed State.同样使用Keyed State也必须开启Ch…...

c语言:模拟实现qsort函数

qsort函数的功能: qsort相较于冒泡排序法,不仅效率更快,而且能够比较不同类型的元素,如:浮点数,结构体等等。这里我们来模拟下qsort是如何实现这一功能的,方便我们对指针数组有一个更深层次的理…...

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构? 数据结构是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…...

VSCode 使用CMakePreset找不到cl.exe编译器的问题

在用vscode开发c项目的时候,使用预先配置的CMakePresets.json可以把一些特定的cmake选项固定下来,在配置时直接使用 "cmake --config --preset presetname"就可以进行配置,免去在命令行输入过多的配置参数。 但是在vscode中&#…...

【Linux系统化学习】进程的状态 | 僵尸进程 | 孤儿进程

个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统化学习 目录 操作系统进程的状态 运行状态 阻塞状态 进程阻塞的现象 挂起阻塞状态 Linux进程状态 Linux内核源代码怎么说 R(running状态)运行状态 S(sl…...

深信服AC流量管理技术

拓扑图 一.保证通道针对修仙部,访问网站,邮件,DNS,IM,办工 OA,微博论坛网上银行等常见应用保证带宽最低 50%,最高 100% 1. 先新建线路带宽 2.新增流量管理通道(保证关键应用&#x…...

二元关系及关系代数中的象集、除运算

二元关系及关系代数中的象集、除运算 数学上,二元关系用于讨论两个数学对象的联系。诸如算术中的「大于」及「等于」,几何学中的"相似",或集合论中的"为...之元素"或"为...之子集"。二元关系有时会简称关系&a…...

[PHP]关联和操作MySQL数据库然后将数据库部署到ECS

在Mac电脑上使用VS Code进行PHP开发并关联操作MySQL数据库,然后将数据库部署到ECS。 1.安装PHP和MySQL 确保你的Mac上已经安装了PHP和MySQL。你可以使用Homebrew来安装它们: $ brew install php $ brew install mysql 安装mysql完成后记住这一句: …...

23.11.19日总结

经过昨天的中期答辩,其实可以看出来项目进度太慢了,现在是第十周,预计第十四周是终级答辩,在这段时间要把项目写完。 前端要加上一个未登录的拦截器,后端加上全局的异常处理。对于饿了么项目的商品建表,之前…...

系列一、JVM概述

一、概述 1.1、Java发展中的重大事件 1.2、虚拟机 vs Java虚拟机 1.2.1、虚拟机 1.2.2、Java虚拟机 1.2.3、Java虚拟机的作用 Java虚拟机是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令指令。每一条Java指令&#…...

milvus数据管理-压缩数据

Milvus 默认支持自动数据压缩。您可以 配置 Milvus 以启用或禁用 压缩 和自动压缩。 如果自动压缩被禁用,您仍然可以手动压缩数据。 1.手动压缩数据 压缩请求是异步处理的,因为它们通常需要花费很长时间。 from pymilvus import Collection collection…...

SpringBoot项目连接linux服务器数据库两种解决方法(linux直接开放端口访问本机通过SSH协议访问,以mysql为例)

最近找个springboot脚手架重新熟悉一下springboot相关框架的东西,结果发现好像项目还不能直接像数据库GUI工具一样填几个SSH参数就可以了,于是就给他再整一下看看如何解决 linux开放3306(可修改)端口直接访问 此方法较为方便&am…...

【Rust】快速教程——闭包与生命周期

前言 你怎么向天生的瞎子说清颜色?怎么用手势向天生的聋子描述声音? 鲜花就在眼前,雷鸣就在头顶,对他们来说却都毫无意义 眼睛看不到,鼻子可以嗅闻花香,耳朵听不见,手指可以触碰窗纸的震动。 犯…...

redis高级案列case

案列一 双写一致性 案例二 双锁策略 package com.redis.redis01.service;import com.redis.redis01.bean.RedisBs; import com.redis.redis01.mapper.RedisBsMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; imp…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...