根据 SSMS 中的时间戳检索紧接的上一行

Retrieve the immediate previous row based on Timestamp in SSMS

我需要根据时间戳的过滤条件检索一组行,时间戳是时间 > 06:OO AM 但是,我还需要前一个记录小于 06:00 AM 才能正确计算事件持续时间

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

示例:我在数据库中有这些行,我必须计算事件持续时间。如果我只是过滤时间戳> 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

应用 'greater than 6:00AM' AND 'Previous row < 06:00AM' 标准,结果应如下所示:

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

考虑到我们在这里没有什么可继续的,我能提供的最好的是伪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';

您需要更换支架 ({}) 中的相应部件。