曲线图需要的连续的且按自定义时间间隔分组的数据的SQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了曲线图需要的连续的且按自定义时间间隔分组的数据的SQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1675字,纯文字阅读大概需要3分钟。
内容图文
遇到了个这样的需求,需要统计某个时间段内每个点下载的数量。
先给大家看最后成果图再来讲解
根据我的需求,我的表结构只需要用到device_id,create_time这两个字段,大概思路是,先根据时间分组查出下载量,再去连一张时间表保证时间段连续。
其中有几个要注意的问题是:
第一,时间分组函数DATE_FORMAT(a.create_time,'%Y-%m-%d %H'),
需要根据用户输入的时间间隔判断是按什么度量分组。如下图:
时间间隔为d
时间间隔 | 按什么度量分组 |
d<1天 | 小时 '%Y-%m-%d %H' |
1天<d<1月 | 天 '%Y-%m-%d' |
1月<d<1年 | 月 '%Y-%m' |
d>1年 | 年 '%Y' |
第二,分组后查出来的结果不一定是连续的,比如查11点到16点的下载量,可能12点没有下载,那12点这条记录就出不来。
如下图我只执行我分组的sql出来的是这样子的
所以我们要连接一张对应时间间隔有连续时间点的表
可以看看我右连的那张连续时间表结果
最后右连接时间表,把没有下载量的时间点用IFNULL函数设为0。
就可以啦~其实思路还是挺清晰。只是要根据时间间隔来选择是按小时还是天还是月还是年分组的时候有点麻烦,我用的mybatis,因为间隔传参mapper.xml里面写了一大片代码!!!害!!!!!
最后!我懂的!sql语句附上哈哈哈哈哈哈哈哈哈哈哈哈哈
select IFNULL(aa.deviceIdCount,0) deviceIdCount,bb.time
from (
select DATE_FORMAT(a.create_time,'%Y-%m-%d %H') createDate, count(DISTINCT a.device_id) deviceIdCount
from device_download_info a where a.create_time>='2020-11-11 00:00:00' and a.create_time <='2020-11-11 08:59:59'
GROUP BY DATE_FORMAT(a.create_time,'%Y-%m-%d %H')
) aa
right join
(select DATE_FORMAT(@date := DATE_ADD(@date,interval 1 hour),'%Y-%m-%d %H') time
from( select @date := DATE_ADD('2020-11-11 00:00:00',interval -1 hour)
from device_download_info
)times where @date <= DATE_FORMAT('2020-11-11 08:59:59','%Y-%m-%d %H')
)bb
on aa.createDate = bb.time order by bb.time
内容总结
以上是互联网集市为您收集整理的曲线图需要的连续的且按自定义时间间隔分组的数据的SQL全部内容,希望文章能够帮你解决曲线图需要的连续的且按自定义时间间隔分组的数据的SQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。