sql-server - 检查两个日期之间的间隔
问题描述
我有一张从日期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 分钟的记录?也许没有“日期”表。
谢谢!
解决方案
您可以使用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;
推荐阅读
- python - 如何在 URL 中替换年份后遍历多个未知数量的页面并获取它们的文本?
- javascript - VueJS:从其子项更新组件集合数据
- ruby-on-rails - 为什么数据库函数会在包含时破坏 Rails 查询计划?
- c# - 枚举值似乎没有持续存在
- nginx - 使用 nginx 作为反向代理上传多部分文件
- python - 解析互斥的可选参数和位置参数,后跟传递参数
- python - 无法完整安装 OpenAI Gym - 无法使用“c:\python37-32\python.exe”创建进程
- django - 在使用 ajax 请求的视图中无法访问会话变量
- heroku - Heroku:postgreSQL 定价如何工作以及如何限制它?
- javascript - 如何防止特定类型的元素存储在数组中?