我有簡單的表,其中有start_date
和end_date
列。這些日期值可能重疊日期的總計範圍沒有計算mysql中的重疊
id start_date end_date
1 2011-01-01 2012-04-01
2 2012-05-01 2013-10-01
3 2013-09-01 2014-09-01
4 2013-10-01 2014-08-01
5 2013-12-01 2014-11-01
6 2013-09-01 2014-09-01
7 2015-01-01 2015-11-01
問題是要在幾個月內找到總和。例如: id: 2,3,4,5,6
重疊,所以想法是採取MAX end_date
和2,3,4,5,6
MIN start_date
並添加1的時間差,以及7
此時:我已經找到了如何估算個月的時間差:
PERIOD_DIFF(DATE_FORMAT(end_date, '%Y%m') , DATE_FORMAT(start_date, '%Y%m'))
我知道這裏的想法是:
- 瞭解兩個日期是否重疊與否。如果是,則合併日期相應的日期(如果需要,調整結束日期和開始日期)
- 循環遍歷所有日期,估計日期差異以月爲單位,總和並返回最終結果。
我一直在尋找類似的問題,無法解決和問題,會很好,如果你能幫助我。我知道可以使用一些編程語言並在那裏估計它,但是想用MySQL查詢來編寫它。
感謝
謝謝你的回答,我已經在我的測試集上運行了你的代碼,它返回了-55,但它應該是55,但我在Stackoverflow上採取了一些其他的答案,並構建了我自己的一個,並在這裏回答了它: http://stackoverflow.com/a/33507876/1206495 – Askhat
啊,雙重檢查文檔,period_diff參數需要反轉。我已經更新了答案。必須承認,我很困惑你的答案..當我測試它時它返回0。 – Arth
我已經測試了你的答案,它正在工作,我認爲你的答案比我的結構更加結構化。所以我會接受它。感謝您的貢獻 – Askhat