首页 > 解决方案 > 检查两个日期之间的间隔

问题描述

我有一张从日期a到日期的时间间隔表b。间隔为 30 分钟,如下所示:

2021-02-22 00:00:00.000
2021-02-22 00:30:00.000
2021-02-22 01:00:00.000
2021-02-22 01:30:00.000
2021-02-22 02:00:00.000
2021-02-22 02:30:00.000
2021-02-22 03:00:00.000
[...]
2021-03-21 23:30:00.000

MIN(date) = 2021-02-22 00:00:00.000我必须每 30 分钟检查一次从 my到 my是否有记录MAX(date) = 2021-03-21 23:30:00.000

每个日历周的COUNT()记录是336。每天 30 分钟 * 每周 7 天 = (24 * 2) * 7)。
我试图检查每个日历周是否有 336 条记录,但如果一条记录丢失并且一条记录存在两次,则计数为 336,但结果是错误的。

SELECT *
FROM (
         SELECT a,
                b,
                DATEPART(iso_week, interval_datetime) AS cw,
                COUNT(id)                             AS counts
         FROM data_table
         GROUP BY DATEPART(iso_week, interval_datetime),
                  a,
                  b
     ) AS xyz
WHERE counts <> 336;

是否有另一种方法来检查是否有双重记录并检查是否使用了每 30 分钟的记录?也许没有“日期”表。

谢谢!

标签: sql-serverdateintervals

解决方案


您可以使用LEAD获取下一个值,然后进行过滤,以便它返回间隙过大的所有值

SELECT *
FROM (
         SELECT a,
                b,
                interval_datetime,
                LEAD(interval_datetime) OVER (ORDER BY interval_datetime) AS nextInterval
         FROM data_table
     ) AS t
WHERE nextInterval IS NULL OR DATEDIFF(second, interval_datetime, nextInterval) > 1800;

推荐阅读