У меня есть таблица с полем timestamp. Как получить данные за последние 3 месяца?
В частности, март - мой текущий месяц, пусть говорят, 03/2012. Мне нужно возвращать записи только с марта, февраля и января.
У меня есть таблица с полем timestamp. Как получить данные за последние 3 месяца?
В частности, март - мой текущий месяц, пусть говорят, 03/2012. Мне нужно возвращать записи только с марта, февраля и января.
За 3 месяца до сегодняшнего дня:
select * from table where timestamp >= now()-interval 3 month;
Начните с первого числа месяца:
select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month;
Чтобы получить первый день текущего месяца, вы можете использовать это:
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
Предполагая, что вы используете 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
Я знаю, что это старый вопрос, но, возможно, за исключением других времени и суммирования вышеупомянутых ответов на случай необходимости (1) даты с текущего месяца и (2) даты с предшествующих двух месяцев (обычно при отображении статистика данных):
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))