我的数据库表有一个datetime
值的数据集
如何在两个值之间的datediff
不大于5分钟的情况下返回结果集,在最小和最高日期之间返回datediff
?
Date
2018-01-01 00:00:00
2018-01-01 00:01:00
2018-01-01 00:02:00
2018-01-01 00:03:00
2018-01-01 00:04:00
2018-01-01 00:13:00
2018-01-01 00:14:00
2018-01-01 00:15:00
2018-01-01 00:19:00
2018-01-01 00:54:00
2018-01-01 00:59:00
2018-01-01 01:00:00
结果集应如下所示:
Ranges(min)
5
4
1
2
该查询的方法是什么?
答案 0 :(得分:1)
只要间隔超过5分钟,您就可以进行休息。然后累积中断次数以定义组并聚合:
select min(dte), max(dte), count(*) as cnt
from (select t.*,
sum(isbreak) over (order by dte) as grp
from (select t.*,
(case when lag(dte) over (order by dte) > dateadd(minute, -5, dte)
then 0 else 1
end) as isbreak
from t
) t
) t
group by grp;
出于某种原因(我现在不清楚),我认为您的问题涉及SQL Server,因此它使用了该语法。 lag()
是ANSI标准功能,可在大多数数据库中使用;日期算术确实因数据库而异。