MySQL仅计算同一组中行的行差异

时间:2016-05-11 04:25:50

标签: mysql

我有下表(称之为反式):

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计算差异,依此类推)?函数或子查询?

其他策略?约束:我有只读权限。我非常感谢你的帮助!

编辑:我添加了预期的输出,在我的示例表中添加了一行,并澄清了。

3 个答案:

答案 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;