SQL 只保留最后 X 行
SQL keep only the last X rows
我有一个 table,其中的 id 不断增加。 Id
并不总是增加相同的值,并且由于 api 而不是 auto_increment
,但它会永久增加。示例:
Id
other content
501
xxx
500
yyy
365
qqq
...
...
现在我只想保留最后 X 行,删除 ID 较低的行。我能够为自己找到一个类似但不是有效的解决方案来解决这个问题。
我认为类似的东西会起作用,但是有一个错误:
DELETE FROM `games` WHERE `matchId` NOT IN(SELECT `matchId` FROM `games` ORDER BY `matchId` DESC LIMIT X)
#1235 - This version of MySQL doesn't yet support 'LIMIT &
IN/ALL/ANY/SOME subquery'
我在 phpmyadmin 5.1.1 网络界面上 运行 mysql 版本 8.0.27。
有没有办法在不触发此错误的情况下保留最新的 x 行?
WITH cte AS (
SELECT id, ROW_NUMBER() OVER (ORDER BY id DESC) AS rownum FROM games
)
DELETE games FROM games JOIN cte USING (id) WHERE rownum > 2;
您可以改用 CTE:
with u as
(select Id from table_name order by Id desc limit 5)
delete from table_name
where Id not in(select Id from u)
我有一个 table,其中的 id 不断增加。 Id
并不总是增加相同的值,并且由于 api 而不是 auto_increment
,但它会永久增加。示例:
Id | other content |
---|---|
501 | xxx |
500 | yyy |
365 | qqq |
... | ... |
现在我只想保留最后 X 行,删除 ID 较低的行。我能够为自己找到一个类似但不是有效的解决方案来解决这个问题。
我认为类似的东西会起作用,但是有一个错误:
DELETE FROM `games` WHERE `matchId` NOT IN(SELECT `matchId` FROM `games` ORDER BY `matchId` DESC LIMIT X)
#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
我在 phpmyadmin 5.1.1 网络界面上 运行 mysql 版本 8.0.27。
有没有办法在不触发此错误的情况下保留最新的 x 行?
WITH cte AS (
SELECT id, ROW_NUMBER() OVER (ORDER BY id DESC) AS rownum FROM games
)
DELETE games FROM games JOIN cte USING (id) WHERE rownum > 2;
您可以改用 CTE:
with u as
(select Id from table_name order by Id desc limit 5)
delete from table_name
where Id not in(select Id from u)