Подтвердить что ты не робот

Возврат записей за последние 3 месяца только в MySQL

У меня есть таблица с полем timestamp. Как получить данные за последние 3 месяца?

В частности, март - мой текущий месяц, пусть говорят, 03/2012. Мне нужно возвращать записи только с марта, февраля и января.

4b9b3361

Ответ 1

За 3 месяца до сегодняшнего дня:

select * from table where timestamp >= now()-interval 3 month;

Начните с первого числа месяца:

select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month;

Ответ 2

Чтобы получить первый день текущего месяца, вы можете использовать это:

DATE_FORMAT(CURDATE(), '%Y-%m-01')

если текущая дата 2013-03-13, она вернет 2013-03-01, и мы можем просто вычесть 2 месяца с этой даты, чтобы получить 2013-01-01. Ваш запрос может быть таким:

SELECT *
FROM yourtable
WHERE data >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH

Ответ 3

Предполагая, что вы используете SQL Server (у Oracle, MySQL и другие аналогичные функции даты), вы можете использовать функцию dateadd для добавления или вычитания интервала в текущую дату.

Если вам нужны полные три месяца, вы можете вычесть 3 месяца с сегодняшнего дня: DATEADD(m,-3,getdate())

Но, как вы заявляете, вам нужны только данные с января, февраля и марта. Вы должны сделать некоторые расчеты на основе сегодняшней даты: dateadd(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))

И в конце получим такой запрос, как

SELECT fields 
FROM table 
WHERE timestampfield > DATEADD(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate()))  + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))

--- изменить --- erf, я только что заметил тег "mysql"... здесь вы можете получить дополнительную информацию о функциях даты MySQL: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

Ответ 4

Я знаю, что это старый вопрос, но, возможно, за исключением других времени и суммирования вышеупомянутых ответов на случай необходимости (1) даты с текущего месяца и (2) даты с предшествующих двух месяцев (обычно при отображении статистика данных):

WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR  (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))