我有下表(称之为反式):
Scratch
我希望得到“计时器”的不同之处。连续行之间,但只有那些具有相同issue_id的行。
预期结果:
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: 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);
问题:在MySQL中,我可以迭代地执行此操作(即计算issue_id = 1的差异,然后为issue_id = 2计算差异,依此类推)?函数或子查询?
其他策略?约束:我有只读权限。我非常感谢你的帮助!
编辑:我添加了预期的输出,在我的示例表中添加了一行,并澄清了。
答案 0 :(得分:3)
select
issue_id, (MAX(timer)-MIN(timer)) as diff from trans
group by issue_id
答案 1 :(得分:1)
Select * from #Temp
Select T1.Issuerid,T1.stateone,T1.statetwo,MAX(T1.timer)-MIN(T.timer) as Time_Diff from #Temp T1
left join #Temp T2 on
T1.issuerid=T2.IssuerId
group by T1.Issuerid,T1.stateone,T1.statetwo
请给我回复
答案 2 :(得分:1)
假设计时器或(issue_id,计时器)是主要的......
SELECT a.*, a.timer-MAX(b.timer)
FROM trans a
JOIN trans b
ON b.issue_id = a.issue_id
AND b.timer < a.timer
GROUP
BY a.issue_id
, a.timer;