首页 文章

如何在mysql查询中获取上个月(不是最近30天)的记录[重复]

提问于
浏览
0

这个问题在这里已有答案:

我正在参与MySQL查询,我需要选择上个月但不是最近30天的记录

例如,如果当前月份是1月,那么我需要记录上个月的记录,即12月,但它应该再次显示2017年12月的记录,而不包括前几年 .

我目前正在使用以下SQL部分 .

$sql .= " AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";

它显示了数据库中所有成员的记录,即2017年12月,2016年12月等 .

我甚至尝试了以下内容

$sql .= " YEAR(checkup_date) AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";

但它只会在上个月不早于1月才有效,但如果当月是2月,那么它将起作用,因此上个月将是1月,而将是2018年

但在我的情况下,当前月份是1月,所以上个月将是12月,但这里的年份是2018年,因此它不会也不会显示任何记录 .

那么伙计们请帮我解决这个问题,以便我可以获得去年的情况,以防当前月份是1月,而在另一个案例中,年份仍然是当年 .

感谢您帮助解决问题 .

3 回答

  • 2

    这是在mysql中获取属于上个月的表中的所有行的查询:

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

    另一种选择是:

    SELECT * FROM table
    WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL
    1 MONTH)
    
  • 0

    你可以简单地做:

    where checkup_date < curdate() - interval (1 - day(curdate())) day and
          checkup_date >= (curdate() - interval (1 - day(curdate())) day) - interval 1 month
    

    通过不在 checkup_date 上使用函数,则方法可以利用h作为该列的适当索引 .

  • 2

    得到上个月的

    select DATE_ADD("2018-01-10", INTERVAL -1 MONTH)
    

相关问题