Выбор строк, которые более чем на одну секунду отличаются друг от друга MYSQL - PullRequest
0 голосов
/ 15 ноября 2018

Это вид из моей таблицы, где я выбрал только дату и время.То, что я ищу, это запрос, который показывает только записи, которые не находятся в диапазоне идентификаторов 5 друг от друга.Или которые больше чем на секунду отличаются друг от друга.

---------------------+--------+
| 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 отображаться в запросе.То же самое относится и к остальным, до тех пор, пока это один из них

Я пробовал этот запрос, но он работает только в том случае, если идентификаторы являются непрерывными

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

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы можете использовать 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)
)

Строки с одинаковыми датой и идентификатором НЕ учитываются.

0 голосов
/ 15 ноября 2018
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...