mysql - 如何获取 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 窗口函数?
首先十分感谢,
解决方案
用户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
推荐阅读
- scala - 使用 EitherT 评估使用共享错误类型继承的操作结果?
- reactjs - Gatsby Netlify 表单未收到提交的问题
- unity3d - 如何在 C# 中查找多边形的内部尺寸
- gitlab - Gitlab 4:上传大文件时超过截止日期
- python - 输入输出内部的键盘按钮自动化
- javascript - 基于现有数组和对象构造新的对象数组
- php - 试图在 PHP 中创建一个匹配模式中的模式的正则表达式
- javascript - 想要重构/修改 Angular 项目中所需 JSON 格式的 API 响应
- android - 从 Wear 应用程序检查 Wear 设备是否已连接到手持设备,2021
- json - 可导出的 JSON 差异