我有一个包含很多行的表。保证行按照名为created_on
的列的顺序插入,这是datetime
列。如果给定行在现有行的5秒内有created_on
时间,我想删除给定的行。
如何编写查询以删除这些行?
答案 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或其他任何方式来捕捉这只猫。我认为这个问题最容易理解,如果有点冗长的话。