如何在SQL中的DB中获取2行之间的列差异

时间:2014-01-22 13:38:02

标签: mysql sql

我有一个看起来像这样的架构

id, time, child_id

所以像

这样的东西
1, 15, 2
2, 19, nil
3, 20, 5
4, 1, nil
5, 100, nil

我需要区分父母及其孩子的时间

所以对于上述数据,结果将是

id | time_difference
-------------------
1  |  4
3  |  80

所以如果一行有一个孩子,它会花费孩子的时间并从父母那里减去它。假设孩子没有自己的孩子(一排是父母或孩子)

2 个答案:

答案 0 :(得分:4)

由于您只有一个级别的父/子,这可以通过自我加入来完成:

select p.id, 
       c.time  - p.time as time_difference
from the_table p
  join the_table c on c.id = p.child_id
where p.child_id is not null;

SQLFiddle:http://sqlfiddle.com/#!2/e882e/1

答案 1 :(得分:0)

这种方法可以让你选择差异的时间单位,比如你想要你的时差,以秒,分,小时为单位。
mysql 有一个时间差异的问题,这个问题从很久以前就没有修复过。:

    Select
    a.id,   Time_To_Sec(b.time) - Time_To_Sec(a.time) As time_difference
    From   your_table a Left Outer Join
    your_table b On a.id = b.child_id 
    Group By 1