SQL для удаления самых старых записей в таблице - PullRequest
4 голосов
/ 28 июня 2010

Я ищу один запрос SQL для запуска в таблице оракулов, который сохранит n записей в таблице и удалит остальные

Я попробовал следующее

delete from myTable where pk not in 
(SELECT pk FROM myTable where rownum <5 order by created DESC)

Но, похоже, у меня не может быть order by во вложенном выборе.

Любая помощь приветствуется

1 Ответ

13 голосов
/ 28 июня 2010

Когда вы используете ORDER BY с ROWNUM, сначала применяется ROWNUM, поэтому вы не получите ожидаемых результатов.Вы можете изменить свой SQL на:

delete from myTable where pk not in 
( SELECT pk FROM 
   ( SELECT pk FROM myTable  order by created DESC)
  where rownum <5
)

Есть много других способов написать это.Если таблица большая и большинство строк будут удалены, возможно, это будет быстрее:

delete from myTable where created < 
( SELECT MIN(created) FROM 
   ( SELECT created FROM myTable order by created DESC)
  where rownum <5
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...