Удалить старые записи, но оставить по 1 записи за каждый месяц?

Имеется таблица, в ней ежедневные данные за последние 6 месяцев. Пропала необходимость держать столько записей, достаточно за предыдущий месяц иметь строку на начало месяца(строка с датой 1 дня месяца, дата хранится в секундах).
Как удалить все остальные данные?
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
@BorisKorobkov Куратор тега MySQL
Web developer
CREATE TEMPORARY TABLE records_tmp
SELECT MIN(`id`) AS id FROM `records` GROUP BY DATE_FORMAT('%Y-%m', `date`);

DELETE FROM `records` WHERE `id` NOT IN (SELECT id FROM records_tmp) AND DATE_FORMAT('%Y-%m', `date`) < DATE_FORMAT('%Y-%m', NOW());

DROP TEMPORARY TABLE records_tmp;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vyrkmod
Пишу на php. И не стыдно.
Как то так:
DELETE FROM `records` WHERE `id` NOT IN (SELECT `alias`.`id` FROM (SELECT * FROM `records` GROUP BY YEAR(`date`), MONTH(`date`) ORDER BY `date`) AS `alias`)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы