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 --排除與自身時間相等的值
結果如下:
有興趣的小伙伴可以動手做一下,興許下次面試就遇到了。
責任編輯:武曉燕
來源:
SQL數據庫開發