MySQL / MariaDB - Удалять все, кроме последней записи за день из базы данных - PullRequest
0 голосов
/ 07 мая 2020

Я использую MariaDB и хочу периодически удалять записи из моей базы данных, оставляя только последнюю запись в БД за день, поэтому через 7 дней останется только 7 записей.

Я нашел что-то похожее на то, что я хочу сделать здесь .

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

Это удаляет все, кроме последней записи, но я хотел бы что-то, что будет оставлять последнюю запись каждый день, поэтому у меня есть последняя запись ежедневно. Решение не должно повторяться по дням, я могу запускать это каждый день, скажем, в полночь, чтобы обрабатывать накануне.

У меня есть столбец под названием «штамп», который является столбцом с меткой времени.

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

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

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

0 голосов
/ 24 мая 2020

Намного быстрее, если таблица нестандартного размера:

CREATE TABLE new LIKE tbl;
INSERT INTO new
    SELECT * FROM tbl WHERE ... ORDER BY ... LIMIT 1;
RENAME TABLE tbl TO old,
             new TO tbl;
DROP TABLE old;

Бонус: tbl доступен на протяжении всего процесса. То есть без простоев.

Этот и другие советы по удалению: http://mysql.rjweb.org/doc.php/deletebig

0 голосов
/ 07 мая 2020

Если у вас есть поле date / datetime, вы можете сделать что-то вроде этого:

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

Я использую таблицу myorders вместо таблицы, но она выглядит примерно так же:

working example

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