(SQL) 删除除最新行以外的所有行

(SQL) Delete all rows except the newest one

我有一个问题,即我要从 table 中删除除最新行之外的所有行。我不太了解如何构造合适的查询。

table结构的外观:

| column1 | column2 | column3 | column4 |
| --------|---------|---------|---------|
| aaa     | aaa     | aaa     | aaa     | 
| bbb     | bbb     | bbb     | bbb     |
| ccc     | ccc     | ccc     | ccc     |

假设第3行是最后添加的,这是最新的。查询后:

| column1 | column2 | column3 | column4 |
| --------|---------|---------|---------|
| ccc     | ccc     | ccc     | ccc     |

如果要删除所有行,SQL 是:

Delete  from theTable;

如果你想排除最新的,希望你有一个id,你这样写:

Delete  from theTable where id <> (Select max (id) from theTable)

你将有两种不同的解决方案,如果你想删除除最后一行以外的所有行,那么首先找到该 table 中的总行数,然后删除除最大值以外的所有行第一个解决方案你应该使用这个

DELETE FROM tablename WHERE column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)

其次,如果您有任何特定的唯一值,则 select 针对该唯一值的所有行然后删除,然后您需要在 SELECT 语句中定义它

DELETE FROM tablename WHERE column2='anyvalue' AND column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)

考虑到上述答案(正确),您还可以对内部 select 设置限制,并按您要使用的唯一字段排序。为了保留你想保留的行并删除所有其他行。

DELETE FROM tablename WHERE column1 NOT IN (SELECT column1 FROM tablename order by column1 desc LIMIT 1 OFFSET 0)