SQL中的常見的時間重疊


問題描述

時間重疊指上下兩行數據的時間段有重疊部分,現在要找出這些在時間上有重疊的記錄。

 

具體問題

有7個會議室,每個會議室每天都有人開會,某一天的開會時間如下:

 

查詢出開會時間有重疊的是哪幾個會議室?上面預期結果是 ID 2 3 4 5 6

 

問題分析

為了方便分析,我們畫了如下一個草圖來具體描述。

 

圖中上面部分t和下面部分b有一段是重復的,分別是b.starttime到t.endtime部分。通過數學集合的思想,我們可以得出這個重疊部分的集合關系。

t.starttime<=b.endtime

AND t.endtime>=b.starttime

上面這個數學集合的重疊部分就是我們要的找的。

 

具體解法

--創建測試數據
WITH Meeting AS(
SELECT 1 ID,'08:00' Starttime,'09:15' Endtime
UNION ALL
SELECT 2,'13:20','15:20'
UNION ALL
SELECT 3,'10:00','14:00'
UNION ALL
SELECT 4,'13:55','16:25'
UNION ALL
SELECT 5,'14:00','17:45'
UNION ALL
SELECT 6,'14:05','17:45'
UNION ALL
SELECT 7,'18:05','19:45')

--查詢代碼
SELECT DISTINCT b.* FROM Meeting t
JOIN Meeting b ON 
t.Starttime<=b.Endtime
AND t.Endtime>=b.Starttime
AND b.ID <> t.ID --排除與自身時間相等的值

結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM