首页 > 解决方案 > SQL检查日期值是否连续5天

问题描述

我有一个包含日期值的日期列,例如,我想查看所有日期值是否连续包含 5 天

2019-03-15
...
2021-06-01
2021-06-02
2021-06-03
2021-06-04
2021-06-05
……
2021-07-01

在这种情况下返回 true

唯一的问题是语法必须适用于 SQL Server 2008 R2 版本

标签: sqlsql-serverdatetsql

解决方案


您可以减去一个枚举值,这对于相邻日期是恒定的。然后汇总和计数。

因此,要获得 5 或更大的所有序列:

select min(date), max(date), count(*)
from (select t.*, row_number() over (order by date) as seqnum
      from t
     ) t
group by dateadd(day, - seqnum, date)
having count(*) >= 5;

如果要返回'true'/'false'值:

select (case when exists (select min(date), max(date), count(*)
                          from (select t.*, row_number() over (order by date) as seqnum
                                from t
                               ) t
                          group by dateadd(day, - seqnum, date)
                          having count(*) >= 5
                         )
              then 'true' else 'false'
        end) as flag

推荐阅读