如何解决顺序查询重叠事件
我正在尝试使用Sequelize进行以下操作的findAll()查询。我希望能够输入用户的ID并搜索“事件”表,以查找是否有任何其他用户的事件与所选用户的事件重叠。我想确保事件至少重叠30分钟。
Events table
id start end createdByUser
1 2020-08-17 05:00:00 2020-08-17 08:00:00 1
2 2020-08-17 06:00:00 2020-08-17 11:00:00 2
3 2020-08-17 07:00:00 2020-08-17 11:00:00 3
4 2020-08-18 12:00:00 2020-08-18 13:00:00 1
5 2020-08-18 12:50:00 2020-08-18 14:00:00 2
6 2020-08-18 09:00:00 2020-08-18 12:10:00 3
7 2020-08-18 12:00:00 2020-08-18 12:45:00 4
8 2020-08-18 15:00:00 2020-08-18 18:00:00 2
示例:我希望能够说“查看用户1的所有事件。查看是否有任何其他用户的事件与用户1的任何事件重叠至少30分钟”。如果返回的查询数据能够以某种方式记录用户1的哪些事件,则该数据会更好!类似于以下内容:
{id: 2,start: 2020-08-17 06:00:00,end: 2020-08-17 11:00:00,createdByUser: 2,overlapWithEventID: 1
},{id: 3,start: 2020-08-17 07:00:00,createdByUser: 3,{id: 7,start: 2020-08-18 12:00:00,end: 2020-08-18 12:45:00,createdByUser: 4,overlapWithEventID: 4
}
提前感谢您的帮助!这是一种比我过去更复杂的查询方式。
解决方法
SELECT t2.*,t1.id overlapWithEventID
FROM events t1
JOIN events t2
WHERE t1.createdByUser = 1
AND t2.createdByUser != 1
AND TIMESTAMPDIFF(MINUTE,GREATEST(t1.start,t2.start),LEAST(t1.`end`,t2.`end`)) >= 30;
调整为您正在使用的DBMS。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。