将重叠日期拆分为不同的记录

时间:2015-08-19 20:13:01

标签: mysql select overlapping-matches

我正在开发一个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中对它们进行排序/拆分来完成此操作,但我想知道我是否可以在数据库层上执行此操作?

有人至少可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我认为你必须要做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

DEMO HERE