为了账号安全,请及时绑定邮箱和手机立即绑定

查询以获取上个月的所有行

查询以获取上个月的所有行

慕标琳琳 2019-12-25 10:31:47
我需要选择数据库中上个月创建的所有行。例如,如果当前月份是一月,那么我想返回在十二月创建的所有行,如果月份是二月,那么我想返回在一月份创建的所有行。date_created我的数据库中有一列,其中列出了以此格式创建的日期:2007-06-05 14:50:17。
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

SELECT * FROM table

WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)

AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)


查看完整回答
反对 回复 2019-12-25
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

这是另一种选择。假设您有一个索引字段DATE或DATETIME类型字段,则应使用索引,因为格式化格式的日期将在使用索引之前进行类型转换。使用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' )


查看完整回答
反对 回复 2019-12-25
?
森林海

TA贡献2011条经验 获得超2个赞

替代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)


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 431 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信