Как удалить все записи таблицы выше определенного числа для очистки - PullRequest
1 голос
/ 14 октября 2011

Чтобы проиллюстрировать мой вопрос, давайте возьмем пример катящихся файлов журнала.Вы устанавливаете ограничение в байтах, и все байты, которые проходят через него, удаляются, чтобы освободить место для новых записей.

Мне нужно что-то подобное для моей базы данных, и я хочу создать запрос, который будет выполняться ежедневно.

Запрос удалит все старые записи в таблице T выше числа N записей.

Записи будут отсортированы по дате по убываниюКонечно.

В этой таблице содержится несколько миллионов записей.

Ответы [ 6 ]

3 голосов
/ 14 октября 2011

Если ID является первичным ключом T:

delete T where ID not in (select top N ID from T order by date_column desc)
2 голосов
/ 14 октября 2011

Вы не указываете RDBMS.Для SQL Server

WITH CTE AS
(
SELECT ROW_NUMBER() OVER (ORDER BY Dt DESC) AS Rn
FROM T
)
DELETE FROM CTE
WHERE Rn > 100000
2 голосов
/ 14 октября 2011

Нечто подобное должно работать.

DELETE FROM <table> WHERE date < (
 SELECT min(date) FROM (
   SELECT date FROM table
   ORDER BY date DESC
   LIMIT N
 )
)

Внутренний выбор находит верхние N новых записей.Затем средний выбор находит более старую дату, а внешний выбор удаляет все, что старше этого.

1 голос
/ 14 октября 2011

Для Oracle (предприятие) вы можете рассмотреть диапазон разбиение большую таблицу по дате.Затем вы можете очень легко (и быстро) удалить или обрезать нужные разделы.Определенно, это не общее решение.

1 голос
/ 14 октября 2011

для ORACLE

delete from T 
where rowid not in ( select rowid 
                     from (select rowid from T order by date desc)
                     where rownum <= N
                    )
1 голос
/ 14 октября 2011

Если я правильно понял ваш вопрос, вам нужно что-то вроде

DELETE FROM T WHERE ID IN (SELECT TOP 1000 ID FROM T AS T1 WHERE T1.DATE > @DATE )

В этом примере N = 1000, а минимальная дата равна @ DATE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...