MySQL: Удалить строки за указанный период.

one

Client
Регистрация
22.09.2015
Сообщения
6 792
Благодарностей
1 264
Баллы
113
Подскажите запрос к БД. Как то не могу сочинить. Есть таблица, в ней записи за последние 5 лет, в таблице есть поле даты в unixtime. Надо одним запросом удалить все строки старше 1 года.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
попробуй так

DELETE FROM table_name WHERE unixtime_field < CURRENT_TIMESTAMP - INTERVAL 1 YEAR

p.s прежде чем экспериментировать с удалением не забудь сделать бэкап ;-)

UPDATE: А, нет, так не покатат ... так будет работать если поле с датой имеет тип datetime
 
  • Спасибо
Реакции: one

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 792
Благодарностей
1 264
Баллы
113
Спасибо! Мысль понял. А интервал более точно можно указать? В мануале не могу пока найти ответ.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 792
Благодарностей
1 264
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 792
Благодарностей
1 264
Баллы
113
Тип поля - varchar, надо timestamp? В этом поле просто дата в формате unixtime.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
varchar это вообще строка, а не число ... со строками такое работать не будет
нужно конвертнуть хотя бы в int unsigned или в какой-нибудь специальный тип для дат/времени
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 792
Благодарностей
1 264
Баллы
113
Сделал тип поля var, данные в нем такого вида 1548780846. Для теста код использую:
Код:
DELETE FROM table_name WHERE field_name < UNIX_TIMESTAMP(CURRENT_TIMESTAMP - INTERVAL 2 MINUTE)
Не удаляются строки.

P.S. Вчера был жутко уставший, решил прикорнуть и... выубился. Сорри что певал диалог. )
 

one

Client
Регистрация
22.09.2015
Сообщения
6 792
Благодарностей
1 264
Баллы
113
попробуй так

DELETE FROM table_name WHERE unixtime_field < CURRENT_TIMESTAMP - INTERVAL 1 YEAR

p.s прежде чем экспериментировать с удалением не забудь сделать бэкап ;-)

UPDATE: А, нет, так не покатат ... так будет работать если поле с датой имеет тип dat etime
Установил полю тип datetime, внес данные в нужном формате и с данным примером все работает. Спасибо!
 
  • Спасибо
Реакции: WebBot

TopSerf

Client
Регистрация
12.02.2017
Сообщения
1 381
Благодарностей
202
Баллы
63
Подскажите, как удалить записи старше 3 месяцев.
Текущий месяц не в счёт. (в какой месяц происходит удаление)
Имеется, поле dt, формат DATA (2022-12-22)
Выходит нужно удалить всё начиная с Августа и старше.
т.е. должно остаться Сентябрь, Октябрь, Ноябрь и текущей месяц Декабрь.
Сам не бум-бум по этому если кому не сложно покажите пример максимально простой :(
 

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 660
Благодарностей
918
Баллы
113
Подскажите, как удалить записи старше 3 месяцев.
Текущий месяц не в счёт. (в какой месяц происходит удаление)
Имеется, поле dt, формат DATA (2022-12-22)
Выходит нужно удалить всё начиная с Августа и старше.
т.е. должно остаться Сентябрь, Октябрь, Ноябрь и текущей месяц Декабрь.
Сам не бум-бум по этому если кому не сложно покажите пример максимально простой :(
Старше 3-х месяцев - это по идее 4 месяца)) чатгпт очень помогает с подобными вещами.

У меня так это выглядит

DELETE FROM tb_statistika_pf
WHERE st_time < DATE_SUB(NOW(), INTERVAL 4 MONTH)
 
  • Спасибо
Реакции: TopSerf

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Konrod_m, такое решение не учитывает что текущий месяц не в счет т.е отсчет нужно вести с первого числа текущего месяца (насколько я понял)

если так, то нужно удалять строки где
116133
 
  • Спасибо
Реакции: TopSerf и Konrod_m

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 660
Благодарностей
918
Баллы
113
Konrod_m, такое решение не учитывает что текущий месяц не в счет т.е отсчет нужно вести с первого числа текущего месяца (насколько я понял)

если так, то нужно удалять строки где
Посмотреть вложение 116133
я чеснто говоря не особо шарю в базах) тут скорее всего задача не сделать корректную выборку, а просто зачистить лишние данные. проходил такое)
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 085
Благодарностей
126
Баллы
63
  • Спасибо
Реакции: TopSerf

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)