sql - 在 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。如何做到这一点,按视图或功能?
解决方案
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
你能试试上面的吗
推荐阅读
- java - Java 错误:变量 playerClass 可能尚未初始化
- mono - MySQL.data.mysqlclient 连接在单声道下失败,但从 VisualStudio IDE 运行正常
- ios - 后端更改后,iOS 应用程序需要重新安装其 API 请求才能再次工作
- prolog - 简单约束逻辑编程示例 CLP(Q) 在 Prolog 中给出错误
- firebase - 无法使用提供程序 Flutter 设置从 Firebase 数据库获取的数据
- postgresql - Postgres如何获得日期之间空数据的总和0,月份数
- javascript - 下拉菜单和可折叠菜单之间的引导切换
- python - LSTM 输出只是输入数据的变体
- css - 打字稿材料ui导航栏不起作用
- java - ANDROID:java.lang.NoClassDefFoundError:解析失败:Lcom/mysql/cj/MysqlType