首页 > 解决方案 > 如何获取 MySQL 连续的时间戳差异?

问题描述

我正在尝试计算 MYSQL 表中连续行的时间戳差异,但也在该表中的组内。

数据如下所示:

"PK"    "GROUP" "STEP"  "STATUS"    "TIMESTAMP" "CORRECT_DIFF"
"1" "1" "1" "N" "13/5/2021 09:00:00"                "900"
"2" "1" "2" "A" "13/5/2021 09:15:00"                "1800"
"3" "1" "3" "T" "13/5/2021 09:45:00"    
"4" "2" "1" "N" "13/5/2021 10:15:00"                "2700"
"5" "2" "2" "A" "13/5/2021 11:00:00"                "1200"
"6" "2" "3" "T" "13/5/2021 11:20:00"    

有第 1 组和第 2 组。在这些组中,可以根据需要包含任意数量的步骤,但上面为每个组显示了 3 个步骤。

我有一个基本查询工作,但它不尊重分组,我无法弄清楚如何得到它。

到目前为止,这是我的查询:

SELECT
 A.`TIMESTAMP`,
    A.`GROUP`,
    A.PK,
    TIMESTAMPDIFF( SECOND, A.TIMESTAMP, B.TIMESTAMP ) AS TS_DIFF,
    A.CORRECT_DIFF AS TS_DIFF_Correct
FROM
    workflow A
    INNER JOIN workflow B ON B.PK = A.PK + 1 
ORDER BY
    PK ASC

它给出了正确的值,但也计算了从一组到下一组的差异。

如何修改上面的查询,使其仅计算组内的连续行差异(上面的 1 或 2)?

也许是 MySQL 8 窗口函数?

首先十分感谢,

标签: mysqlsql

解决方案


用户LEAD()

SELECT wf.*
       TIMESTAMPDIFF(SECOND, wf.TIMESTAMP,
                     LEAD(wf.TIMESTAMP) OVER (PARTITION BY `Group` ORDER BY  wf.TIMESTAMP)
                    ) AS TS_DIFF
FROM workflow wf
ORDER BY PK ASC

推荐阅读