MySQL选择日期时间重叠条目

时间:2016-11-27 18:29:57

标签: mysql

我有一个包含以下设置的表格:

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时间并计算结束时间但是我不确定如何比较每个条目

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用费萨尔的小提琴......

coo_matrix

http://rextester.com/YJA59081

答案 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;

点击以下链接,您可以在实时中看到您想要的预期结果。

SQL Fiddle Demo