sql|sql server 以10分钟分组 统计人数

请问针对时间段从每天早上7点开始统计每十分钟人
解决思路:
我以前做过一个关于月份的,是说每3个月以分组,其实是一样的。不过可能啊,整体数据量大会有问题。如果你只是求一天的,那绝对没问题。
【1】如果只是当天,那么你以当天七点为准,算当天所有时间与它的分钟差,然后group by 分钟差/10 即可
【2】如果是全部数据的话,那么你在where里把时间段条件加上,然后找个最早的时间点为准 group by 当前时间与最早时间点的分钟差/10
这位朋友这样是死写,本文以当天为例啊
sql|sql server 以10分钟分组 统计人数
文章图片


【1】构建个表测试一下
sql|sql server 以10分钟分组 统计人数
文章图片

【2】利用分钟差/10分组
sql|sql server 以10分钟分组 统计人数
文章图片

【3】显示不直观,转换成时间显示
sql|sql server 以10分钟分组 统计人数
文章图片

SELECT DATEDIFF( Minute, '2017-01-01 07:00:00', '2017-01-01 7:18:20')create table test104( idint identity(1,1), [time] datetime ) insert into test104 values('20180301 07:05:05') insert into test104 values('20180301 07:06:05') insert into test104 values('20180301 07:15:05') insert into test104 values('20180301 07:16:05') insert into test104 values('20180301 07:25:05') insert into test104 values('20180301 07:26:05') insert into test104 values('20180301 07:35:05') insert into test104 values('20180301 07:36:05') insert into test104 values('20180301 07:45:05') insert into test104 values('20180301 07:46:05') insert into test104 values('20180301 07:55:05') insert into test104 values('20180301 07:56:05')selectdateadd(minute,DATEDIFF( Minute, '20180301 07:00:00', time)/10*10,'20180301 07:00:00' ),count(1) from test104 group byDATEDIFF( Minute, '20180301 07:00:00', time)/10


方法2:利用分钟构造出想要的分钟列。
比如2018-03-01 07:56:05,构造出2018-03-01 07:50:00
核心思想
(1)分钟数56拿出来,然后让其变成50
(2)怎么变成50?--》56-56%10 = 50
(3)怎么去掉后面的秒呢?用convert解决
selectdateadd(minute,datepart(minute,time)%10*(-1),time )as example_col , convert(char(16),dateadd(minute,datepart(minute,time)%10*(-1),time),120)+':00' as [group_time] ,*from test104


sql|sql server 以10分钟分组 统计人数
文章图片



后面的分组就不用多说了,直接分就OK
select group_time, count(1) as [时间段内记录数], max(time) as [时间段内最大时间], min(time) as [时间段内最小时间] from ( selectdateadd(minute,datepart(minute,time)%10*(-1),time )as example_col , convert(char(16),dateadd(minute,datepart(minute,time)%10*(-1),time),120)+':00' as [group_time] ,*from test104 ) t group by group_time


sql|sql server 以10分钟分组 统计人数
文章图片



上述2种办法适合于任意维度的时间操作

关于本文更好的办法,直接 --但仅限于这种10分钟的
group BY LEFT(startTime,15)【sql|sql server 以10分钟分组 统计人数】转载于:https://www.cnblogs.com/gered/p/8549241.html

    推荐阅读