我有下表(称之为反式):
issue_id: state_one: state_two: timer:
1 A B 1
1 B C 3
2 A B 2
2 B C 4
2 C D 7
我希望获得连续行之间“计时器”的差异,但仅限于具有相同 issue_id 的行。
预期结果:
issue_id: state_one: state_two: timer: time_diff:
1 B C 3 2
2 B C 4 2
2 C D 7 3
当计算两行之间的时间差时,我希望结果显示在后面一行的旁边。
如果表中只有一个按时间排序的问题,则以下代码可以正常工作:
select
X.issue_id,
X.timer as X_timer,
Y.timer as Y_timer,
(X.timer - Y.timer) as time_diff
from trans X
cross join trans Y
where Y.timer in (
select
max(Z.timer)
from trans Z
where Z.timer < X.timer);
我想推广这种方法来处理许多具有时间顺序状态更改的问题。
我的想法是添加以下条件,但它仅在连续事件属于同一问题时才有效(现实世界中并非如此):
... where Z.timer < X.timer)
and X.issue_id = Y.issueid;
问题:在 MySQL 中,我可以迭代地执行此操作(即计算 issue_id=1 的差异,然后计算 issue_id=2 的差异,依此类推)吗?函数还是子查询?
其他策略?约束:我有只读权限。非常感谢您的帮助!
编辑:我添加了预期的输出,在我的示例表中添加了一行,并进行了说明。
最佳答案
select
issue_id, (MAX(timer)-MIN(timer)) as diff from trans
group by issue_id
关于MySQL 只计算同一组中行的行差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37153107/