我想知道如何在 sql 中对相邻日期范围进行交叉或连接。
例如,我有一个客户开始和结束日期的列表(以 dd/mm/yyyy 格式,其中 31/12/9999 表示客户仍然是当前客户)。
CustID | StartDate | Enddate |
1 | 01/08/2011|19/06/2012|
1 | 20/06/2012|07/03/2012|
1 | 03/05/2012|31/12/9999|
2 | 09/03/2009|16/08/2009|
2 | 16/01/2010|10/10/2010|
2 | 11/10/2010|31/12/9999|
3 | 01/08/2010|19/08/2010|
3 | 20/08/2010|26/12/2011|
尽管不同行中的日期不重叠,但我会将某些范围视为一个连续的时间段,例如,当开始日期在结束日期后一天出现时(对于给定的客户)。因此,我想返回一个只返回日期交集的查询,
CustID | StartDate | Enddate |
1 | 01/08/2011|07/03/2012|
1 | 03/05/2012|31/12/9999|
2 | 09/03/2009|16/08/2009|
2 | 16/01/2010|31/12/9999|
3 | 01/08/2010|26/12/2011|
我查看了 CTE 表,但我不知道如何只为一个连续的日期块返回一行。