某些范围的多行之间的Datediff

时间:2018-01-12 23:13:33

标签: sql sql-server range datediff

我的数据库表有一个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

该查询的方法是什么?

1 个答案:

答案 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标准功能,可在大多数数据库中使用;日期算术确实因数据库而异。