2017-03-15 15 views
2

我有一個開始/結束日期表,我想按ID進行分組,並總結每個ID的總時間。例如:MySQL如何獲得可能重疊日期的開始/結束日期的總和

fk_id   start    end 
3    2014-03-21 10:02 2014-05-01 08:05 
3    2014-06-05 05:00 2014-06-20 22:00 
5    2014-03-10 08:00 2014-06-20 13:50 
5    2014-05-10 09:45 2014-06-22 15:31 

對於fk_id=3沒有問題:

  • 我可以做一個TIMESTAMPDIFF爲每一行和總結他們

fk_id=5的日期重疊:

  • 所以在這種情況下TIMESTAMPDIFF應該在
    • 2014-03-10 08:00
    • 2014-06-22 15:31

有沒有辦法做這種類型的查詢在MySQL?

謝謝!

+1

要格式化爲'code'之前解決的範圍,選擇文本和按'ctrl-k'或在之前添加4個空格每行 –

回答

1

使用可變agregate總計

SQL DEMO

SELECT t.`fk_id`, 
     @rn := if(@id = `fk_id`, 
       @rn + 1, 
       if(@id:=`fk_id`, if(@end:='1900-01-01 00:00:00',1,1), if(@end:='1900-01-01 00:00:00',1,1)) 
       ) as rn, 
     if(start < @end, 
      @end, 
      if(@end := end, `start`, `start`) 
     ) as `start`, 
     end 
FROM Table1 t 
CROSS JOIN (SELECT @id := 0, @end := STR_TO_DATE('1900-01-01 00:00:00', '%Y-%m-%d %H:%i:%s') as e, @rn := 0) t 
ORDER BY `fk_id`, `start` 

輸出

enter image description here

+0

工程太棒了!現在爲每個fk_id得到一筆總和,我可以對每一行都有一個積極的結果。謝謝。 – MRogo

+0

不知道你的數據是否可能,但要小心,如果一個範圍是在另一個範圍內,而不僅僅是重疊。需要輔助檢查。 –

+0

它正在工作,即使一個範圍在另一個範圍內。再次感謝 – MRogo

相關問題