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

one

Client
Joined
Sep 22, 2015
Messages
6,991
Reaction score
1,305
Points
113
Подскажите запрос к БД. Как то не могу сочинить. Есть таблица, в ней записи за последние 5 лет, в таблице есть поле даты в unixtime. Надо одним запросом удалить все строки старше 1 года.
 

WebBot

Client
Joined
Apr 4, 2015
Messages
1,825
Reaction score
1,414
Points
113
попробуй так

DELETE FROM table_name WHERE unixtime_field < CURRENT_TIMESTAMP - INTERVAL 1 YEAR

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

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

WebBot

Client
Joined
Apr 4, 2015
Messages
1,825
Reaction score
1,414
Points
113

one

Client
Joined
Sep 22, 2015
Messages
6,991
Reaction score
1,305
Points
113
Спасибо! Мысль понял. А интервал более точно можно указать? В мануале не могу пока найти ответ.
 

one

Client
Joined
Sep 22, 2015
Messages
6,991
Reaction score
1,305
Points
113
(CURRENT_TIMESTAMP - INTERVAL 1 YEAR)
Не уверен (пока) , но по моему эта часть кода не в UNIX_TIMESTAMP т.е. ему надо в обычном формате подсовывать.
 

one

Client
Joined
Sep 22, 2015
Messages
6,991
Reaction score
1,305
Points
113
Тип поля - varchar, надо timestamp? В этом поле просто дата в формате unixtime.
 

WebBot

Client
Joined
Apr 4, 2015
Messages
1,825
Reaction score
1,414
Points
113
varchar это вообще строка, а не число ... со строками такое работать не будет
нужно конвертнуть хотя бы в int unsigned или в какой-нибудь специальный тип для дат/времени
 
  • Thank you
Reactions: one

one

Client
Joined
Sep 22, 2015
Messages
6,991
Reaction score
1,305
Points
113
Сделал тип поля var, данные в нем такого вида 1548780846. Для теста код использую:
Code:
DELETE FROM table_name WHERE field_name < UNIX_TIMESTAMP(CURRENT_TIMESTAMP - INTERVAL 2 MINUTE)
Не удаляются строки.

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

one

Client
Joined
Sep 22, 2015
Messages
6,991
Reaction score
1,305
Points
113
попробуй так

DELETE FROM table_name WHERE unixtime_field < CURRENT_TIMESTAMP - INTERVAL 1 YEAR

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

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

TopSerf

Client
Joined
Feb 12, 2017
Messages
1,511
Reaction score
233
Points
63
Подскажите, как удалить записи старше 3 месяцев.
Текущий месяц не в счёт. (в какой месяц происходит удаление)
Имеется, поле dt, формат DATA (2022-12-22)
Выходит нужно удалить всё начиная с Августа и старше.
т.е. должно остаться Сентябрь, Октябрь, Ноябрь и текущей месяц Декабрь.
Сам не бум-бум по этому если кому не сложно покажите пример максимально простой :(
 

Konrod_m

Client
Joined
Sep 18, 2014
Messages
1,797
Reaction score
1,005
Points
113
Подскажите, как удалить записи старше 3 месяцев.
Текущий месяц не в счёт. (в какой месяц происходит удаление)
Имеется, поле dt, формат DATA (2022-12-22)
Выходит нужно удалить всё начиная с Августа и старше.
т.е. должно остаться Сентябрь, Октябрь, Ноябрь и текущей месяц Декабрь.
Сам не бум-бум по этому если кому не сложно покажите пример максимально простой :(
Старше 3-х месяцев - это по идее 4 месяца)) чатгпт очень помогает с подобными вещами.

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

DELETE FROM tb_statistika_pf
WHERE st_time < DATE_SUB(NOW(), INTERVAL 4 MONTH)
 
  • Thank you
Reactions: TopSerf

WebBot

Client
Joined
Apr 4, 2015
Messages
1,825
Reaction score
1,414
Points
113
Konrod_m, такое решение не учитывает что текущий месяц не в счет т.е отсчет нужно вести с первого числа текущего месяца (насколько я понял)

если так, то нужно удалять строки где
116133
 

Konrod_m

Client
Joined
Sep 18, 2014
Messages
1,797
Reaction score
1,005
Points
113
Konrod_m, такое решение не учитывает что текущий месяц не в счет т.е отсчет нужно вести с первого числа текущего месяца (насколько я понял)

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

bizzon

Client
Joined
Sep 8, 2015
Messages
1,120
Reaction score
135
Points
63
  • Thank you
Reactions: TopSerf

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)