sql-server - 根据 SSMS 中的时间戳检索前一行
问题描述
我需要根据 Timestamp 上的过滤条件检索一组行,即 - Timestamps with Time > 06:OO AM 但是,我还需要小于 06:00 AM 的前一个记录来正确计算事件持续时间
如何检索 Time > 6:00 AM 和最后一行小于 6:00 AM 的行?
示例:我在数据库中有这些行,我必须计算事件持续时间。如果我只是过滤 Timestamp > 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
应用“大于上午 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
解决方案
考虑到我们在这里做的很少,我能提供的最好的就是 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';
您需要更换大括号 ( {}
) 中的相应部件。
推荐阅读
- mysql - 将容器化的 Node.js 应用程序连接到 MySQL 服务器
- flutter - 限制 valueNotifier.value 值的变化
- r - %--% 运算符是做什么的?
- powershell - Powershell splatting:在哈希表中传递 ErrorAction = Ignore
- r - 在 R 数据框中删除带有模式的后缀
- mysql - 试图理解 IN 和 EXISTS 之间的区别
- c++ - 如何在 C++ 中使用空值初始化 char 到 char 的映射?
- xml - 使用 PL/SQL 删除部分 XML
- javascript - JS:不要在有条件的情况下为地图添加价值
- perl - 无法在 Linux 上使用 cpan/cpanm 安装 Net::Pcap