1

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

我将如何编写查询来删除这些行?

4

1 回答 1

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 或其他方法给这只猫剥皮。我认为这是最容易理解的,如果有点冗长的话。

于 2009-05-24T01:45:52.360 回答