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

请问针对时间段从每天早上7点开始统计每十分钟人

解决思路:

我以前做过一个关于月份的,是说每3个月以分组,其实是一样的。不过可能啊,整体数据量大会有问题。如果你只是求一天的,那绝对没问题。
【1】如果只是当天,那么你以当天七点为准,算当天所有时间与它的分钟差,然后group by 分钟差/10 即可
【2】如果是全部数据的话,那么你在where里把时间段条件加上,然后找个最早的时间点为准 group by 当前时间与最早时间点的分钟差/10

这位朋友这样是死写,本文以当天为例啊

 

【1】构建个表测试一下

【2】利用分钟差/10分组

【3】显示不直观,转换成时间显示

复制代码
SELECT DATEDIFF( Minute, '2017-01-01 07:00:00', '2017-01-01 7:18:20')

create table test104(
id  int 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')

select   dateadd(minute,DATEDIFF( Minute, '20180301 07:00:00', time)/10*10,'20180301 07:00:00' ),count(1) from test104
group by  DATEDIFF( 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解决

复制代码
select   dateadd(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

 


复制代码

 

  后面的分组就不用多说了,直接分就OK

复制代码
select 
    group_time,
    count(1) as [时间段内记录数],
    max(time) as [时间段内最大时间],
    min(time) as [时间段内最小时间] 
from 
(
    select   dateadd(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

 


复制代码

 

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

 

关于本文更好的办法,直接 --但仅限于这种10分钟的

group BY LEFT(startTime,15) 
posted @   郭大侠1  阅读(1241)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示