首页 > 解决方案 > 在 SQL Server 中查找冲突记录

问题描述

我有 SQL Server 表

Meetings:
-Id,
-RoomId,
-DataFrom,
-DataTo

我想获得所有有任何冲突的会议。有一个例子:

Meeting 1:
Id: 1,
RoomId: 1,
DataFrom: 1 P.M
DataTo: 3 P.M

Meeting 2:
Id: 2
Room: 1,
DataFrom: 2.P.M
DataTo: 3 P.M

由于房间相同,并且第二次会议设置在第一次会议期间,因此存在冲突。

我还需要指出冲突对象的 ID。如何做到这一点,按视图或功能?

标签: sqlsql-servertsql

解决方案


WITH MEETINGS(ID,ROOMID,DATAFROM,DATATO) AS
(
   SELECT 1,1,'20210421 13:00','20210421 15:00'
     UNION ALL
  SELECT 2,1,'20210421 14:00','20210421 15:00'
)
SELECT M.ID ,M.ROOMID,M.DATAFROM,M.DATATO,M2.ID AS CONFLICTED_ID
FROM MEETINGS  AS M
JOIN MEETINGS AS M2 ON M.ROOMID=M2.ROOMID
AND (M.DATAFROM BETWEEN M2.DATAFROM AND M2.DATATO OR
    M.DATATO BETWEEN M2.DATAFROM AND M2.DATATO)
AND M.ID<>M2.ID

你能试试上面的吗


推荐阅读