根据 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 | 2019-05-26 04:38:16.1156432
- 活动2 |资源 1 | 2019-05-26 05:51:23.2356984
- 活动 3 |资源 1 | 2019-05-26 06:01:32.1033333
- 事件 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';
您需要更换支架 ({}
) 中的相应部件。
我需要根据时间戳的过滤条件检索一组行,时间戳是时间 > 06:OO AM 但是,我还需要前一个记录小于 06:00 AM 才能正确计算事件持续时间
如何检索时间 > 6:00 AM 的行和最后一行小于 6:00 AM 的行?
示例:我在数据库中有这些行,我必须计算事件持续时间。如果我只是过滤时间戳> 6:00 AM,第二个也会被过滤掉,我需要进一步计算
实际:
- 事件 1 |资源 1 | 2019-05-26 04:38:16.1156432
- 活动2 |资源 1 | 2019-05-26 05:51:23.2356984
- 活动 3 |资源 1 | 2019-05-26 06:01:32.1033333
- 事件 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';
您需要更换支架 ({}
) 中的相应部件。