MySQL查询删除日期接近另一行的行

时间:2009-05-24 01:29:43

标签: mysql database date delete-row

我有一个包含很多行的表。保证行按照名为created_on的列的顺序插入,这是datetime列。如果给定行在现有行的5秒内有created_on时间,我想删除给定的行。

如何编写查询以删除这些行?

1 个答案:

答案 0 :(得分:1)

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或其他任何方式来捕捉这只猫。我认为这个问题最容易理解,如果有点冗长的话。