首页 > 解决方案 > 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 秒)。

标签: sqldatetime

解决方案


我想我可能已经找到了答案:

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秒


推荐阅读