【发布时间】:2018-11-27 08:33:31
【问题描述】:
我为此苦苦挣扎了几天...尝试编写 SQL 查询以获取所有单位同时重叠时的所有日期范围。最好以图形方式查看。
这是带有图片的简化表格供参考:
UnitId Start End
====== ========== ==========
1 05/01/2018 09/01/2018
1 10/01/2018 13/01/2018
2 04/01/2018 15/01/2018
2 19/01/2018 23/01/2018
3 06/01/2018 12/01/2018
3 14/01/2018 22/01/2018
预期结果:
Start End
====== ==========
06/01/2018 09/01/2018
10/01/2018 12/01/2018
我目前拥有的:
DECLARE @sourceTable TABLE (UnitId int, StartDate datetime, EndDate datetime);
INSERT INTO @sourceTable VALUES
(1, '2018-01-05', '2018-01-09')
,(1, '2018-01-10', '2018-01-13')
,(2, '2018-01-04', '2018-01-15')
,(2, '2018-01-19', '2018-01-23')
,(3, '2018-01-06', '2018-01-12')
,(3, '2018-01-14', '2018-01-22');
SELECT DISTINCT
(SELECT max(v) FROM (values(A.StartDate), (B.StartDate)) as value(v)) StartDate
,(SELECT min(v) FROM (values(A.EndDate), (B.EndDate)) as value(v)) EndDate
FROM @sourceTable A
JOIN @sourceTable B
ON A.startDate <= B.endDate AND A.endDate >= B.startDate AND A.UnitId != B.UnitId
【问题讨论】:
-
您能否将您的 sql 显示为您迄今为止尝试过的内容,以便我们帮助改进它。另外,你能创建一个 SQL Fiddle 来帮助我们吗
标签: sql sql-server tsql datetime