当前位置: 代码迷 >> Sql Server >> 找到同一个用户是否在相同时间段里有时间冲突(时间段交叉)
  详细解决方案

找到同一个用户是否在相同时间段里有时间冲突(时间段交叉)

热度:54   发布时间:2016-04-24 09:10:47.0
找出同一个用户是否在相同时间段里有时间冲突(时间段交叉).
table1 有如下列:

uniqueid, userid, starttime, endtime
001, AA, 2015-04-23 17:15:00.000, 2015-04-23 17:35:00.000
002, BB, 2015-04-23 17:15:00.000, 2015-04-23 17:35:00.000
003, AA, 2015-04-23 17:05:00.000, 2015-04-23 17:20:00.000
004, AA, 2015-04-23 17:30:00.000, 2015-04-23 17:45:00.000
005, BB, 2015-04-23 18:15:00.000, 2015-04-23 18:35:00.000
006, BB, 2015-04-23 18:15:00.000, 2015-04-23 18:35:00.000

找出同一个用户是否在相同时间段里有时间冲突(时间段交叉),并返回如下数据:

userid, ids
AA, 001 003 004
BB, 005 006

------解决思路----------------------
;WITH CTE AS(
SELECT * FROM table1 T1
WHERE EXISTS(
SELECT 1 FROM table1 T2
WHERE T1.userid=T2.userid AND T1.uniqueid<>T2.uniqueid
AND T1.starttime<=T2.endtime AND T1.endtime>=T2.starttime
)
)
SELECT userid
,STUFF((SELECT ' '+uniqueid FROM CTE T2
WHERE T1.userid=T2.userid
FOR XML PATH(''))
,1,1,'')AS[ids]
FROM CTE T1
GROUP BY userid
  相关解决方案