sql - SQL Server - 计算包含 YYYY-MM-DD HH:MM:SS 格式的日期时间戳的多列之间的经过时间
问题描述
我有一个包含两列的表。一列具有操作代码,第二列具有 DateTime 标记
我对比较同一行上两个不同列的 DateTime 有点熟悉,但不熟悉多行中的一列
样本数据:
Task_ID Action_Code CreateDate
----------- ----------- -----------------------
474344 BEGIN 2018-09-28 15:00:00
474344 PAUSE 2018-09-28 16:07:29
474344 RESUME 2018-09-28 16:08:49
474344 PAUSE 2018-09-28 16:09:57
474344 RESUME 2018-09-28 16:11:20
474344 CLOSE 2018-09-28 17:00:00
474390 BEGIN 2018-09-28 11:00:00
474390 PAUSE 2018-09-28 11:07:29
474390 RESUME 2018-09-28 11:08:49
474390 PAUSE 2018-09-28 11:09:57
474390 CLOSE 2018-09-28 12:00:00
对于 Task_ID 474344,我预计总时间计算为 1:57:17(1 小时 57 分钟 17 秒)。
对于 Task_ID 474390,我预计总时间计算为 0:8:37(8 分 37 秒)。
解决方案
我想我可能已经找到了答案:
SELECT DATEDIFF(second, pCreateDate, CreateDate)
FROM (
SELECT *, LAG(CreateDate) OVER (ORDER BY CreateDate) pCreateDate
FROM TaskDataBase
WHERE (Action_Code = 'Pause' OR Action_Code = 'Resume') AND Task_ID = '474344') q
WHERE pCreateDate IS NOT NULL AND Action_Code = 'Resume';
以上会给我
(No column name)
----------------
80
83
然后我可以将这两个相加得到 163 秒,并将其从 BEGIN 和 CLOSE 时间(即 2 小时或 7,200 秒)的时间比较中删除,这样我的总时间为 1 小时 57 分钟 17秒
推荐阅读
- php - 如何使用 Microsoft Graph API 创建一个没有错误的文件夹?
- python-3.x - webdriver移动仿真python中的向下滑动功能
- typescript - 如何正确地期望从被监视的函数的 catch 块内部在 Jest 中引发错误?
- pytorch - Pytorch 和批处理
- javascript - 旧数据未被 vue 组件中的新用户输入覆盖
- ios - Flutter 如何查看文档和数据以及删除导入的包是否会减小大小?
- python - groupby 保留所有以前的字段
- html - 具有设置像素值的最大高度 - 它是 Hacky 还是必要的?
- sql - 在 SQL 链接中创建 URL
- perl - 从 LWP::UserAgent 到 Mojo::UserAgent 的匹配方法