MySQL / MariaDB-每天从数据库中删除所有记录,但最后一条记录除外

问题描述 投票:0回答:2

我正在使用MariaDB,并且希望定期从数据库中清除记录,每天仅保留数据库中的最后一条记录,因此在7天之内将只剩下7条记录。

我发现了与我想做的here类似的事情。

DELETE FROM `table` WHERE id NOT IN (   SELECT id   FROM (
  SELECT id
  FROM `table`
  ORDER BY id DESC
  LIMIT 1   ) foo );

这会删除除最后一条记录以外的所有记录,但是我希望某些东西每天都会保留最后一条记录,因此我每天都有最新的记录。该解决方案不必遍历过去的一天,我可以每天半夜运行此命令来处理前一天的问题。

我有一个称为'stamp'的列,它是一个timestamp列。

mysql mariadb
2个回答
-1
投票

尝试一次。我从表中选择了具有今天日期的所有记录,并以降序排列,并保留第一个记录(即您的情况下的最新记录),并删除其余记录。另外,由于仅选择了具有今天日期的那些记录,因此保留了前一天的记录。您可以修改日期部分以包括所需的日期。

DELETE FROM table WHERE id=(SELECT id FROM table where DATE(tableDate)=CURDATE() ORDER BY id DESC OFFSET 1) AS SUBQUERY


-1
投票

如果您有日期/日期时间字段,则可以执行以下操作:

DELETE a FROM table a INNER JOIN table b on (date_format(a.date, '%Y-%m-%d') = date_format('%Y-%m-%d') and a.id < b.id)

我使用的是myorders表而不是表,但是看起来几乎相同:

working example

© www.soinside.com 2019 - 2024. All rights reserved.