2020-09-10MYSQL按时间段分组查询当天,每小时,15分钟数据分组

更新时间:2023-07-30 12:01:13 阅读: 评论:0

2020-09-10MYSQL按时间段分组查询当天,每⼩时,15分钟数据分组
查询的需求⽐较⿇烦,根据spreader_id和返回的状态码来判断事件的回传成功率,但是还需要新增时间段的查询,⽐如产品要的是每15分钟内数据的回传成功率。
这样的话就需要对时间段进⾏分组查询,我保存的数据是时间戳的格式。
⽹上找资料看了下,抄了⼀些⽅法,总结以下sql
按照⼩时分组进⾏查询
lect FROM_UNIXTIME(timestamp,'%Y-%m-%d %H')as dt_h,-- 这⾥根据分组的条件进⾏时间戳的格式化
安全宣传五进
spreader_id,status,count(*)as num
FROM s2s_log.s2s_callback_log
WHERE event_type_id ='8'
AND timestamp BETWEEN'1599321600'AND'1599494400'
group by dt_h, spreader_id,status
order by dt_h
-- 也可执⾏
SELECT COUNT(*),
DATE_FORMAT(TIME,'%Y-%m-%d %H:00:00')AS TIME
FROM tableName
GROUP BY TIME
/*
如果按⼩时分组则格式调整为 “%Y-%m-%d %H:00:00”
按分钟分组则格式调整为 “%Y-%m-%d %H:%i:00”
*/
但是这个满⾜不了产品的每15分钟去查询数据分组的数据
拆解搜索⽹址之后,修改如下,后续修改
按照15分钟分组查询我的植物
SELECT TIME,
spreader_id,
status,
COUNT(*)AS num
FROM
(SELECT FROM_UNIXTIME(TIMESTAMP)AS data_dt,-- 需要将时间戳进⾏格式的转换
DATE_FORMAT( concat(date(FROM_UNIXTIME(TIMESTAMP)),' ',HOUR(FROM_UNIXTIME(TIMESTAMP)),':', floor(MINUTE(FROM_UNIXTIM E(TIMESTAMP))/15)*15),'%Y-%m-%d %H:%i')AS TIME,讲章
spreader_id,
status
FROM s2s_log.s2s_callback_log
WHERE event_type_id ='8'
AND TIMESTAMP BETWEEN'1599321600'AND'1599580800') a  -- 时间戳限制3⽇内的数据
GROUP BY DATE_FORMAT(TIME,'%Y-%m-%d %H:%i'),
spreader_id,
status
ORDER BY TIME
以上的sql根据⽇期的分钟来进⾏筛选(15分钟),后续分组的维度为spreader_id, status得出的数据便是不同的渠道在15分钟的时间点内数据的状态。
mysql相关函数
DATE_FORMAT()
'''
DATE_FORMAT()函数⽤于以不同的格式显⽰⽇期/时间数据。
语法:  DATE_FORMAT(date,format)
参数: /sql/func_date_format.asp
总结
mysql不同时间粒度下的分组统计
按天统计张逸涵
按⼩时统计
按半⼩时统计
按N分钟统计
按分钟统计
按天统计
SELECT DATE(dt)AS date,COUNT(*)AS num
FROM my_table
WHERE Flag =0AND Duration >=300
GROUP BY date
ORDER BY date;
按⼩时统计
SELECT DATE_FORMAT(dt,'%Y-%m-%d %H:00:00')AS time,COUNT(*)AS num
-- SELECT DATE_FORMAT(dt, '%Y-%m-%d %H') AS time, COUNT(*) AS num
FROM track
亚述部队
WHERE Flag =0AND Duration >=300
GROUP BY time
ORDER BY time;
按每分钟统计
SELECT DATE_FORMAT(dt,'%Y-%m-%d %H:%i:00')AS time,COUNT(*)AS num
-- SELECT DATE_FORMAT(dt, '%Y-%m-%d %H:%i') AS time, COUNT(*) AS num
FROM track
WHERE Flag =0AND Duration >=300
GROUP BY time
ORDER BY time;
按30分钟统计
SELECT time,COUNT(*)AS num
FROM
(
SELECT Duration,
DATE_FORMAT(
concat(date( TimeStart ),' ',HOUR( TimeStart ),':', floor(MINUTE( TimeStart )/30)*30),
'%Y-%m-%d %H:%i'
)AS time
FROM tarck
WHERE Flag =0AND Duration >=300
) a
GROUP BY DATE_FORMAT(time,'%Y-%m-%d %H:%i')
ORDER BY time;
按N分钟统计
将上⾯的SQL语句稍微修改下,就可以实现按任意N分钟为时间⽚的分组统计,如按10分钟统计,先上代码:
SELECT time,COUNT(*)AS num
FROM
(
SELECT Duration,
DATE_FORMAT(
concat(date( TimeStart ),' ',HOUR( TimeStart ),':', floor(MINUTE( TimeStart )/10)*10),公仓鼠
'%Y-%m-%d %H:%i'
)AS time
FROM tarck
WHERE Flag =0AND Duration >=300
) a
GROUP BY DATE_FORMAT(time,'%Y-%m-%d %H:%i')
个性签名英语ORDER BY time;
基本思路:
将datetime类型的时间转化为相应时间⽚的时间,例如将‘2017-03-01 01:08:19’ 转化为‘2017-03-01 01:00:00’,然后group by即可。
参考博客
mysql按天,⼩时,半⼩时,N分钟,分钟进⾏数据分组统计
blog.csdn/qq_39268288/article/details/103735748?utm_medium=distribute.-task-blog-title-4&spm=1001.2101.3001.4242
学雷锋绘画作品sql中时间以5分钟半个⼩时任意间隔分组的实现⽅法
/article.php?aid=19062448408855841712601613

本文发布于:2023-07-30 12:01:13,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1123712.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   分组   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图