簡體   English   中英

將重疊的日期分割成不同的記錄

[英]Split overlapping dates into different records

我正在開發一個PHP + MySQL應用程序。 我有一個表,其中包含時間段的開始日期和結束日期。 期間可以重疊。 例:

ID   Start       End
1    01/05/2015  31/05/2015
2    01/06/2015  30/06/2015
3    15/06/2015  25/06/2015 (this record overlaps record with ID 2)
4    17/06/2015  22/06/2015 (this record overlaps records with IDs 2 and 3)

我需要選擇所有記錄,按開始日期和結束日期排序,還要拆分重疊的記錄並保留其ID。 我的意思是我最終需要做到這一點:

ID   Start       End
1    01/05/2015  31/05/2015
2    01/06/2015  14/06/2015
3    15/06/2015  16/06/2015
4    17/06/2015  22/06/2015
3    23/06/2015  25/06/2015
2    26/06/2015  30/06/2015

我可以通過選擇所有句點然后在PHP中對它們進行排序/拆分來做到這一點,但是我想知道是否可以在數據庫層上做到這一點?

請問有人至少可以指出我正確的方向嗎?

我認為您必須這樣做PHP(或者也許是一個db過程,但是我不會在db層上這樣做),這會更容易。 您必須考慮許多組合,它們不能放入單個SQL語句中。

這是如何發現重疊的示例(至少這是我可以幫助您的方式):

SELECT  t1.id, t1.start, t1.id, t2.id
FROM    T t1, T t2
WHERE   (t2.start BETWEEN t1.start AND t1.end
        OR t2.end BETWEEN t1.start AND t1.end)
        AND t2.id > t1.id

此處演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM