У меня есть DATE, как я могу написать, where
это проверяется за последний месяц до настоящего времени (либо первый, либо только сегодняшний день -1 месяц)?
SELECT * FROM table WHERE dateField > DATE_SUB(NOW(), INTERVAL 1 MONTH)
Это выбирает все строки, которые имеют dateField
более недавнее, чем текущая временная метка минус один месяц (так, например, данный сегодня – 26 сентября 2009 года 00:56, это даст строки, которые являются более свежими, чем 26 августа 2009 года 00:56)
На самом деле, в прошлом месяце до сих пор было бы:
С начала месяца:
SELECT * FROM table WHERE date >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y-%m-01') AND date <= NOW()
Так как месяц назад: (надеюсь, у вас нет будущих дат на столе)
SELECT * FROM table WHERE date >= (CURRENT_DATE - INTERVAL 1 MONTH)
В качестве альтернативы вам может понадобиться только последний месяц … Скажите сегодня, что сентябрь, и вы хотите весь август, не включая сентябрь … Это то, что я понимаю как «в прошлом месяце».
SELECT * FROM table WHERE date >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y/%m/01') AND date < DATE_FORMAT(CURRENT_DATE, '%Y/%m/01')
Вы также можете сделать для того же результата:
SELECT * FROM table WHERE YEAR(date) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)