MySQL запрос на удаление строк, даты которых близки к другой строке - PullRequest
1 голос
/ 24 мая 2009

У меня есть таблица, содержащая много строк. Строки гарантированно вставлены в порядке столбца с именем created_on, который является столбцом datetime. Если у данной строки есть created_on время в течение 5 секунд от существующей строки, я хотел бы удалить данную строку.

Как мне написать запрос для удаления этих строк?

1 Ответ

1 голос
/ 24 мая 2009
SELECT *
FROM TABLE AS A
WHERE EXISTS (
    SELECT *
    FROM TABLE AS B
    WHERE DATE_SUB(A.created_on, INTERVAL 5 SECOND) <= B.created_on
        AND B.created_on < A.created_on
)

Вы понимаете, что это в основном удалит все цепочки событий в течение 5 секунд друг от друга, кроме первого события в цепочке.

Поскольку вы не можете создать псевдоним таблицы в DELETE, вам придется сделать что-то вроде этого:

DELETE
FROM   so902859
WHERE   created_on IN (
        SELECT  created_on
        FROM   so902859 AS A
        WHERE   EXISTS ( SELECT *
                         FROM  so902859 AS B
                         WHERE  DATE_SUB(A.created_on, INTERVAL 5 SECOND) <= B.created_on
                                AND B.created_on < A.created_on ) )

Есть миллион способов скинов для этой кошки с помощью JOIN или чего-то еще. Я думаю, что этот текст наиболее понятен, хотя и немного длинен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...