这是我表中的一个视图,在该视图中我仅选择了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:55
或2018-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;
答案 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的行不计算在内。