我有一个包含以下设置的表格:
CREATE TABLE IF NOT EXISTS `appointment` (
`appId` tinyint(3) UNSIGNED AUTO_INCREMENT NOT NULL,
`startDateTime` datetime,
`duration` time DEFAULT NULL
);
示例数据:
appId startDateTime duration
1 2015-05-04 16:15:00 00:14:00
2 2015-05-12 08:15:00 05:54:00
3 2015-05-12 08:35:00 02:14:00
4 2016-05-04 08:11:00 04:11:00
5 2015-05-13 19:30:00 02:50:00
预期产出:
appId startDateTime duration
2 2015-05-12 08:15:00 05:54:00
3 2015-05-12 08:35:00 02:14:00
我需要一个查询能够检查表中的每个条目并返回和碰撞的条目。在上面的示例数据中,2和3将重叠。我可以将两个字段转换为unix时间并计算结束时间但是我不确定如何比较每个条目
有什么想法吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
尝试使用以下查询。希望它能解决你的问题。
SELECT
tbl1.*
FROM
appointment tbl1,
appointment tbl2
WHERE
tbl2.appId <> tbl1.appId
AND tbl2.startDateTime < tbl1.startDateTime + INTERVAL TIME_TO_SEC(tbl1.duration) SECOND
AND tbl2.startDateTime + INTERVAL TIME_TO_SEC(tbl2.duration) SECOND > tbl1.startDateTime;
点击以下链接,您可以在实时中看到您想要的预期结果。