MySQL:查询获取上个月的所有行
我需要select上个月创build的数据库中的所有行。
例如,如果当前月份是一月份,那么我想要返回在十二月份创build的所有行,如果该月份是二月份,那么我想返回在一月份创build的所有行。 我在我的数据库中有一个date_created
列,列出以这种格式创build的date: 2007-06-05 14:50:17
。
SELECT * FROM table WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
这是另一个select。 假设你有一个索引的DATE
或DATETIME
types字段,这应该使用索引,因为格式化date将在使用索引之前进行types转换。 在使用EXPLAIN查看时,您应该看到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' )
如果没有未来的date…
SELECT * FROM table_name WHERE date_created > (NOW() - INTERVAL 1 MONTH);
testing。
或者hobodave的答案
SELECT * FROM table WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
你可以使用YEAR_MONTH作为单位来达到和EXTRACT一样的效果,所以你不需要AND,就像这样:
SELECT * FROM table WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL 1 MONTH)
以下是查询获取上个月的logging:
SELECT * FROM `tablename` WHERE `datefiled` BETWEEN DATE_SUB( DATE( NOW( ) ) , INTERVAL 1 MONTH ) AND LAST_DAY( DATE_SUB( DATE( NOW( ) ) , INTERVAL 1 MONTH ) )
问候 – saqib
select fields FROM table WHERE date_created LIKE concat(LEFT(DATE_SUB(NOW(), interval 1 month),7),'%');
如果您的date_created被索引,这个将能够利用索引,因为它不会将任何转换函数应用于字段值。
即使这个问题的答案已被选中,但是,我相信最简单的查询将是
SELECT * FROM table WHERE date_created BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE();
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)
这对我有效(select上个月创build的所有logging,不pipe你在这个月运行查询的那一天)
select * FROM yourtable where DATE_FORMAT(date_created,'%Y-%m')= date_format(DATE_SUB(curdate(),INTERVAL 1 month),'%Y-%m')