【问题标题】:T-SQL - check gap in datetime data for every minuteT-SQL - 每分钟检查日期时间数据中的差距
【发布时间】:2019-05-17 10:11:33
【问题描述】:

我们有一个数据库,每分钟记录系统中的数据

+---------+-------------------------+  
| Id      | EntryDate               |     
+---------+-------------------------+   
| 8093562 | 2019-05-17 15:01:25.000 |  
| 8093563 | 2019-05-17 15:02:25.000 |  
| 8093564 | 2019-05-17 15:03:25.000 |  
| 8093565 | 2019-05-17 15:04:25.000 |  
| 8093566 | 2019-05-17 15:05:25.000 |  
| 8093568 | 2019-05-17 15:07:25.000 |  
| 8093569 | 2019-05-17 15:08:25.000 |  
| 8093780 | 2019-05-17 15:09:25.000 |  
| 8093781 | 2019-05-17 15:10:25.000 |  
+---------+-------------------------+   

我正在尝试进行查询,以查找分钟之间是否存在任何间隔。例如在上面的数据中,15:06 的数据是缺失的。

无法弄清楚如何在 SQL 查询中执行此操作。

【问题讨论】:

  • 那么您的预期输出是什么? 2019-05-17 15:06:25.000Id ?
  • 2019-05-17 15:06:25.000

标签: sql-server tsql datetime


【解决方案1】:

LEAD()CASE 一起使用,您可以获得预期的结果:

SELECT ResultDate FROM (
    SELECT CASE WHEN (DATEDIFF(MINUTE, LEAD(EntryDate, 1) OVER(ORDER BY EntryDate),EntryDate) < -1) THEN DATEADD(MINUTE, +1, EntryDate) END AS ResultDate
    FROM TableName
) Q WHERE ResultDate IS NOT NULL

具有给定样本数据的演示:

DECLARE  @TestTable TABLE (Id INT, EntryDate DATETIME);

INSERT INTO @TestTable (Id, EntryDate) VALUES  
(8093562, '2019-05-17 15:01:25.000'),
(8093563, '2019-05-17 15:02:25.000'),
(8093564, '2019-05-17 15:03:25.000'),
(8093565, '2019-05-17 15:04:25.000'),
(8093566, '2019-05-17 15:05:25.000'),
(8093568, '2019-05-17 15:07:25.000'),
(8093569, '2019-05-17 15:08:25.000'),
(8093780, '2019-05-17 15:09:25.000'),
(8093781, '2019-05-17 15:10:25.000');

SELECT ResultDate FROM (
    SELECT CASE WHEN (DATEDIFF(MINUTE, LEAD(EntryDate, 1) OVER(ORDER BY EntryDate),EntryDate) < -1) THEN DATEADD(MINUTE, +1, EntryDate) END AS ResultDate
    FROM @TestTable
) Q WHERE ResultDate IS NOT NULL

输出:

ResultDate
-----------------------
2019-05-17 15:06:25.000

Demo on db<>fiddle

【讨论】:

  • 感谢查询非常适合上述数据但是如果数据库缺少多分钟,它只返回第一分钟dbfiddle.uk/…
  • @AnsarMuhammad 。 . .这回答了您提出的问题。我建议您接受这个答案,并提出一个关于多个缺失分钟更清楚的新问题。
  • @AnsarMuhammad 感谢您接受答案。如果您要发布一个包含多分钟间隔问题的新问题,我可以为此发布答案。
  • @AnsarMuhammad 请查找working demo 用于 DB 缺少多分钟的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多