选择彼此相差一秒以上的行

时间:2018-11-15 14:45:17

标签: mysql sql datetime

这是我表中的一个视图,在该视图中我仅选择了DateTime和id。 我正在寻找的查询仅显示不在5个ID范围内的记录。或彼此相差一秒以上。

---------------------+--------+
| DateTime            | id     |
+---------------------+--------+
| 2018-06-02 16:10:13 |  61863 |
| 2018-06-03 14:04:13 |  63715 |
| 2018-06-03 17:34:28 |  64339 |
| 2018-06-04 14:20:55 |  67227 |
| 2018-06-04 14:20:56 |  67228 |
| 2018-06-04 15:39:47 |  67845 |
| 2018-06-04 17:07:12 |  68085 |
| 2018-06-04 17:07:13 |  68086 |
| 2018-06-04 17:51:11 |  68197 |
| 2018-06-04 17:51:12 |  68199 |
| 2018-06-05 05:22:59 |  68518 |
| 2018-06-05 05:23:00 |  68519 |
| 2018-06-07 10:28:28 |  74568 |
| 2018-06-07 16:18:36 |  76386 |

所以我的桌子看起来像这样:

---------------------+--------+
| DateTime            | id     |
+---------------------+--------+
| 2018-06-02 16:10:13 |  61863 |
| 2018-06-03 14:04:13 |  63715 |
| 2018-06-03 17:34:28 |  64339 |
| 2018-06-04 14:20:55 |  67227 |
| 2018-06-04 15:39:47 |  67845 |
| 2018-06-04 17:07:12 |  68085 |
| 2018-06-04 17:51:11 |  68197 |
| 2018-06-05 05:22:59 |  68518 |
| 2018-06-07 10:28:28 |  74568 |
| 2018-06-07 16:18:36 |  76386 |

查询中是否显示2018-06-04 14:20:552018-06-04 14:20:56都没有关系。其余的都一样,只要是其中之一

我已经尝试过该查询,但是仅在ID连续的情况下才有效

 SELECT t0.*, t1.id
 FROM table t0
 LEFT JOIN table t1
 ON t0.id + 1 = t1.id
    WHERE t1.id IS NULL;

2 个答案:

答案 0 :(得分:0)

select t1.Datetime, t1.id
from mytable t1
join mytable t2
on t2.Datetime=(select Datetime from mytable t2 
where t2.Datetime > t1.Datetime 
and t2.id-t1.id > 5
limit 1)
where timestampdiff(second,t1.Datetime,t2.Datetime)>1;

答案 1 :(得分:0)

您可以像这样使用NOT EXISTS

SELECT *
FROM yourdata t
WHERE NOT EXISTS (
    SELECT 1
    FROM yourdata x
    WHERE (x.DateTime > t.DateTime AND x.DateTime <= t.DateTime + INTERVAL 1 SECOND)
    OR    (x.id       > t.id       AND x.id       <= t.id + 4)
)

具有相同日期时间或ID的行不计算在内。