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


мне нужно выбрать все строки в моей базе данных, которые были созданы в прошлом месяце.

date_created столбец в моей базе данных, в котором указана дата, созданная в этом формате:2007-06-05 14:50:17.
9 65

9 ответов:

SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

вот еще один вариант. Если у вас есть индексированный DATE или DATETIME поле типа, это должно использовать индекс, поскольку форматированные даты будут преобразованы в тип перед использованием индекса. Затем вы должны увидеть range запрос, а не index запрос при просмотре с объяснить.

SELECT
    * 
FROM
    table
WHERE 
    date_created >= DATE_FORMAT( CURRENT_DATE - INTERVAL 1 MONTH, '%Y/%m/01' ) 
AND
    date_created < DATE_FORMAT( CURRENT_DATE, '%Y/%m/01' )

если нет будущего времени ...

SELECT * 
FROM   table_name 
WHERE  date_created > (NOW() - INTERVAL 1 MONTH);

проверено.

вместо hobodave это

SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

вы можете добиться того же с EXTRACT, используя YEAR_MONTH как единицу, таким образом, вам не понадобится и, например:

SELECT * FROM table
WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL
1 MONTH)
SELECT *
FROM  yourtable
where DATE_FORMAT(date_created, '%Y-%m') = date_format(DATE_SUB(curdate(), INTERVAL 1 month),'%Y-%m')

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

хотя ответ на этот вопрос уже выбран, однако, я считаю, самый простой запрос будет

SELECT * 
FROM table 
WHERE 
date_created BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE();

вот запрос на получение записей за последний месяц:

SELECT *
FROM `tablename`
WHERE `datefiled`
BETWEEN DATE_SUB( DATE( NOW( ) ) , INTERVAL 1
MONTH )
AND 
LAST_DAY( DATE_SUB( DATE( NOW( ) ) , INTERVAL 1
MONTH ) )

С уважением - момент закрытия

select fields FROM table WHERE date_created LIKE concat(LEFT(DATE_SUB(NOW(), interval 1 month),7),'%');

Это один сможет воспользоваться индексом, если ваш date_created индексируется, потому что он не применяет никаких функций преобразования к значению поля.

WHERE created_date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) 
  AND created_date <= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), INTERVAL 0 DAY) 

это сработало для меня (выбирает все записи, созданные с прошлого месяца, независимо от дня запуска запроса в этом месяце)