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