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

如何在mysql查询中获取上个月(不是最近30天)的记录,mysql,sql,datetime,Mysql,Sql,Datetime,我在MySQL查询中有一个部分,我需要选择上个月的记录,而不是最近30天的记录 例如,如果当前月份是1月,那么我需要上个月的记录,即12月的记录,但它应该只显示2017年12月的记录,而不包括前几年的记录 我目前正在使用以下SQL部分进行相同的操作 $sql .= " AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)"; 它在数据库中显示所有12月的记录,即2017年12月、2016年12月等等 我甚至试过以下方法 $sql .

我在MySQL查询中有一个部分,我需要选择上个月的记录,而不是最近30天的记录

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

我目前正在使用以下SQL部分进行相同的操作

$sql .= " AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";
它在数据库中显示所有12月的记录,即2017年12月、2016年12月等等

我甚至试过以下方法

$sql .= " YEAR(checkup_date) AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";
但只有在上个月不早于1月的情况下,它才会起作用 i、 e如果当前月份是2月,那么它将工作,所以最后一个月是1月,年份是2018年

但在我的例子中,当前月份是1月,所以上个月是12月,但这里的年份是2018年,所以它不是也不会显示任何记录

所以伙计们,请帮我修正这个查询,这样我就可以得到最后一年,如果当前月份是一月,而在另一种情况下,年份仍然是当前年份

感谢您帮助解决此问题。

获取上个月的

select DATE_ADD("2018-01-10", INTERVAL -1 MONTH)
得到上个月的

select DATE_ADD("2018-01-10", INTERVAL -1 MONTH)
您可以简单地执行以下操作:

where checkup_date < curdate() - interval (1 - day(curdate())) day and
      checkup_date >= (curdate() - interval (1 - day(curdate())) day) - interval 1 month
通过在检查日期不使用函数,则该方法可以利用作为该列的适当索引。

您可以简单地执行以下操作:

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

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

这是在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)

这是在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)