2014-01-22 23 views
0

我有一個模式,它看起來像這樣如何獲得2行之間的列差在DB在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 

所以如果一行有一個孩子,它會花費孩子的時間,並從父母中減去它。假設孩子沒有自己的孩子(一排或者是父母或孩子)

+0

哪些DBMS您使用與時間差的問題,因爲很久以前,hasn't得到修復:? Postgres的?甲骨文? –

+0

哎呀對不起,mysql –

回答

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

'where'條件是多餘的;你正在做一個內部連接。 –

+0

@GordonLinoff:你是對的(儘管我認爲它爲聲明增加了某種「清晰度」:「我們只對......感興趣」) –

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 
相關問題