mysql 监测数据按半小时分组

mysql 监测数据按半小时分组,第1张

        在开发中遇到如下问题:现地的OPC采集数据的频率是5分钟一次,通过数据同步的方式同步到业务库,以图表的形式展示给业务人员。因为数据量较大,把每一条数据都展示出来导致页面数据太多。业务人员提出按每半小时取一条数据,各项指标取这半小时内的平均值。

                                                                                                            原数据展示

    1,按半小时分组就是将半小时内的时间划为一组。即2020-05-01 00:00 --2020-05-01 00:25 这些数据将被分到2020-05-01 00:00 这一组

2,先利用UNIX_TIMESTAMP函数将tm字段转化成秒,其表示从1970-01-01 00:00:00到tm所经历的秒数,对其做半小时的向下取整,最后再做Group by。

1800秒:半小时

floor(t.tm/1800) : 对于半小时的个数做向下取整

floor(t.tm/1800) * 1800: 取得整半小时的时间

3,对具体的监测值再做处理。我这里只要对这个时间段内的取平均数就行了。经过调整,达到业务人员的需求。

SQL没办法得到当前的时间戳 除非你是用服务器脚本语言 追问: SELECT count(*) FROM `ip11` WHERE DATE_FORMAT(NOW(),'%H')-DATE_FORMAT(time_tip,'%H')=1 and TO_DAYS( NOW( ) ) - TO_DAYS(time_tip)=1可以的我写的这个就可以的,关键是我现在不知道怎么写循环的。我上面的这个句子可以实现查询每个小时内的记录条数,我不想写24个,用循环怎么写呢。 回答: SQL循环我不知道,只做过服务器脚本语言的 PS:DATE_FORMAT(NOW(),'%H')得到的是当前小时 比如11点20,用DATE_FORMAT(NOW(),'%H')得到的值是11,而不是你想要的12 追问: DATE_FORMAT(NOW(),'%H')-DATE_FORMAT(time_tip,'%H')=0 比如现在14:40,上面这句话可以得到14:00-14:40之间的记录数。 我现在就是不会写php的循环 回答: <?php for($i=0$i<=11$i++){ $sql = "SELECT count(*) FROM `ip11` WHERE DATE_FORMAT(NOW(),'%H')-DATE_FORMAT(time_tip,'%H')=".$i." and TO_DAYS( NOW( ) ) - TO_DAYS(time_tip)=1"echo $sql} ?>echo $sql只是测试 i=0就是当前小时的,i=1就是1小时前的,以此类推

这个要有个前提的

要求你那个 MySQL 里面, time 那一列的数据类型, 是 DATETIME 或者 TIME

如果数据类型是 DATE , 那就彻底没办法了:

注:MySQL 日期时间数据类型

DATE

日期。支持的范围为’1000-01-01’到’9999-12-31’。

MySQL以’YYYY-MM-DD’格式显示DATE值,但允许使用字符串或数字为DATE列分配值。

DATETIME

日期和时间的组合。

支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。

MySQL以’YYYY-MM-DD HH:MM:SS’格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。

TIME

时间。范围是’-838:59:59’到’838:59:59’。

MySQL以’HH:MM:SS’格式显示TIME值,但允许使用字符串或数字为TIME列分配值。

SQL 语句的 WHERE 部分可以这么写

WHERE

Hour( time ) = 1

OR ( Hour( time ) = 2 ANDMINUTE( time) = 0 AND Second (time ) = 0 )


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8622802.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存