首页 > 解决方案 > 根据 SSMS 中的时间戳检索前一行

问题描述

我需要根据 Timestamp 上的过滤条件检索一组行,即 - Timestamps with Time > 06:OO AM 但是,我还需要小于 06:00 AM 的前一个记录来正确计算事件持续时间

如何检索 Time > 6:00 AM 和最后一行小于 6:00 AM 的行?

示例:我在数据库中有这些行,我必须计算事件持续时间。如果我只是过滤 Timestamp > 6:00 AM,第二个也会被过滤掉,我需要进一步计算

实际的:

  1. 事件1 | 资源1 | 2019-05-26 04:38:16.1156432
  2. 事件2 | 资源1 | 2019-05-26 05:51:23.2356984
  3. 活动3 | 资源1 | 2019-05-26 06:01:32.1033333
  4. 活动4 | 资源1 | 2019-05-26 06:03:12.3245614

应用“大于上午 6:00”和“上一行 < 06:00”标准,结果应如下所示:

1. 事件2 | 资源1 | 2019-05-26 05:51:23.2356984
2. Event3 | 资源1 | 2019-05-26 06:01:32.1033333
3. Event4 | 资源1 | 2019-05-26 06:03:12.3245614

标签: sql-serversql-timestamp

解决方案


考虑到我们在这里做的很少,我能提供的最好的就是 Pseudo-SQL。

无论如何,您想要的是 CTE 和LEAD

WITH CTE AS(
    SELECT {Your Columns},
           LEAD({Your Date & Time Column}) OVER (/*PARTITION BY {Some Column(s)}*/ ORDER BY {Your Date & Time Column} AS NextTime --Uncomment/Remove PARTITION BY Clause as needed
    FROM {Your TABLE} YT)
SELECT {Your Columns}
FROM CTE
WHERE NextTime >= '2019-05-26T06:00:00';

您需要更换大括号 ( {}) 中的相应部件。


推荐阅读