题目
有如下一张记录表,如何查询出每隔15分钟的记录数?
预期结果:
数据准备
create table times_log(
id int
,times datetime
)
GO
insert into times_log values(1,'2020-12-25 11:01:00')
insert into times_log values(2,'2020-12-25 11:03:00')
insert into times_log values(3,'2020-12-25 11:05:00')
insert into times_log values(4,'2020-12-25 11:09:00')
insert into times_log values(5,'2020-12-25 11:17:00')
insert into times_log values(6,'2020-12-25 11:19:00')
insert into times_log values(7,'2020-12-25 11:29:00')
insert into times_log values(8,'2020-12-25 11:37:00')
解题思路
- 计算当前时刻与本日0点的分钟时间差,与15分钟取余再乘15,转化成15分钟一个刻度的分钟数
DATEDIFF(mi, convert(varchar(10), times, 120), times) /15 *15
转化成时刻
CONVERT(varchar(100), DATEADD(mi,(DATEDIFF(mi, convert(varchar(10), times, 120), times) /15) *15, CONVERT(varchar(10), times, 120)), 120)
分组统计得出结果
select CONVERT(varchar(100), DATEADD(mi,(DATEDIFF(mi, convert(varchar(10), times, 120), times) /15) *15, CONVERT(varchar(10), times, 120)), 120) AS [Time],
count(0) Num
from times_log
group by CONVERT(varchar(100), DATEADD(mi,(DATEDIFF(mi, convert(varchar(10), times, 120), times) /15) *15, CONVERT(varchar(10), times, 120)), 120)
其他思路
也可以先创建一个时刻段维度表,每15分钟一个刻度把所有刻度跑进去,然后再拼接日期,关联查询
维度表如下: