与 table2 相比,我如何知道 table1 中的哪一行重叠?
我有两个表,每个表都有多行用于日期和时间列。考虑到日期和时间范围,我想知道 table1 中的哪一行与 table2 重叠。
表 1
SrNo DateStart DateEnd TimeStart TimeEnd IsOverlapping
1 2021-08-01 2021-08-01 01:10:00 01:20:00 NULL
2 2021-08-01 2021-08-01 01:30:00 01:45:00 NULL
3 2021-08-01 2021-08-01 01:31:00 03:00:00 NULL
4 2021-08-02 2021-08-04 01:30:00 01:45:00 NULL
5 2021-08-02 2021-08-04 09:00:00 10:30:00 NULL
Table2
SrNo DateStart DateEnd TimeStart TimeEnd
1 2021-08-01 2021-08-01 01:00:00 01:15:00
2 2021-08-01 2021-08-01 02:01:00 02:30:00
3 2021-08-01 2021-08-01 03:01:00 03:30:00
4 2021-08-01 2021-08-01 04:01:00 05:10:00
5 2021-08-02 2021-08-04 10:00:00 10:15:00
6 2021-08-02 2021-08-04 11:01:00 11:30:00
预期结果:
SrNo DateStart DateEnd TimeStart TimeEnd IsOverlapping
1 2021-08-01 2021-08-01 01:10:00 01:20:00 1
2 2021-08-01 2021-08-01 01:30:00 01:45:00 0
3 2021-08-01 2021-08-01 01:31:00 03:00:00 1
4 2021-08-02 2021-08-04 01:30:00 01:45:00 0
5 2021-08-02 2021-08-04 09:00:00 10:30:00 1
表的 SQL 脚本
DeclARE @DateStart DATE=CONVERT(DATE,'01-Aug-2021'),@DateEnd DATE=CONVERT(DATE,@DateStart2 DATE=CONVERT(DATE,'02-Aug-2021'),@DateEnd2 DATE=CONVERT(DATE,'04-Aug-2021')
DROP TABLE IF EXISTS [#Table1];
SELECT ROW_NUMber()OVER(ORDER BY (SELECT NULL))[SrNo],*,(NULL)IsOverlapping INTO [#Table1] FROM (
SELECT @DateStart[DateStart],@DateEnd[DateEnd],CONVERT(TIME(0),'01:10:00')TimeStart,'01:20:00')TimeEnd UNION
SELECT @DateStart[DateStart],'01:30:00')TimeStart,'01:45:00')TimeEnd UNION
SELECT @DateStart[DateStart],'01:31:00')TimeStart,'03:00:00')TimeEnd UNION
SELECT @DateStart2[DateStart],@DateEnd2[DateEnd],'01:45:00')TimeEnd UNION
SELECT @DateStart2[DateStart],'09:00:00')TimeStart,'10:30:00')TimeEnd
)t;SELECT * FROM [#Table1];
DROP TABLE IF EXISTS [#Table2];
SELECT ROW_NUMber()OVER(ORDER BY (SELECT NULL))[SrNo],* INTO [#Table2] FROM (
SELECT @DateStart[DateStart],'01:00:00')TimeStart,'01:15:00')TimeEnd UNION
SELECT @DateStart[DateStart],'02:01:00')TimeStart,'02:30:00')TimeEnd UNION
SELECT @DateStart[DateStart],'03:01:00')TimeStart,'03:30:00')TimeEnd UNION
SELECT @DateStart[DateStart],'04:01:00')TimeStart,'05:10:00')TimeEnd UNION
SELECT @DateStart2[DateStart],'10:00:00')TimeStart,'10:15:00')TimeEnd UNION
SELECT @DateStart2[DateStart],'11:01:00')TimeStart,'11:30:00')TimeEnd
)t;SELECT * FROM [#Table2];