在mysql中获取从过去一年到上个月最后一天的记录

在mysql中获取从过去一年到上个月最后一天的记录,mysql,sql,Mysql,Sql,我正在尝试获取过去一年以及提供月份最后一天的记录,即不包括当前月份。我的问题是: SELECT `customer_id`, `customer_name`, `customer_date` FROM `customers` WHERE DATE(`customer_date`) <= (CURDATE() - INTERVAL 1 MONTH) AND DATE(customer_date) >= (CURDATE() - INTERVAL 12 MONTH)

我正在尝试获取过去一年以及提供月份最后一天的记录,即不包括当前月份。我的问题是:

SELECT `customer_id`, `customer_name`, `customer_date` 
FROM `customers` 
WHERE DATE(`customer_date`) <= (CURDATE() - INTERVAL 1 MONTH) 
      AND DATE(customer_date) >= (CURDATE() - INTERVAL 12 MONTH)
选择“客户id”、“客户名称”、“客户日期”
来自“客户”
其中日期(`customer\u DATE`)=(CURDATE()-间隔12个月)
此查询获取2018年5月1日至2019年4月8日的记录

间隔1个月30天前获取记录。我需要在这里做些什么


我想排除当月记录,因此查询应返回2019年4月30日之前的记录。我们如何做到这一点?

您必须使用帮助功能正确计算范围的第一天和最后一天。例如:

计算范围的第一天

SELECT LAST_DAY(CURDATE() - INTERVAL 13 MONTH) + INTERVAL 1 DAY
SELECT LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
输出:

2018-05-01

计算范围的最后一天

SELECT LAST_DAY(CURDATE() - INTERVAL 13 MONTH) + INTERVAL 1 DAY
SELECT LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
输出:

2019-04-30

完整查询可能如下所示:

SELECT `customer_id`, `customer_name`, `customer_date` 
FROM `customers` 
WHERE `customer_date` >= LAST_DAY(CURDATE() - INTERVAL 13 MONTH) + INTERVAL 1 DAY 
   AND `customer_date` <= SELECT LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
选择“客户id”、“客户名称”、“客户日期”
来自“客户”
其中,`customer\u date`>=最后一天(CURDATE()-间隔13个月)+间隔1天
和'customer\u date'
从'customers'中选择'customer\u id','customer\u name','customer\u date'
月份(`customer\u date`)=(CURDATE()-间隔12个月)

希望这有助于获取上个月的数据:

where customer_date < curdate() + interval (1 - day(curdate()) day

@草莓你什么意思?我就是这个意思。这正是我想要的。谢谢,这似乎有点复杂。Maxim解决方案易于理解并满足我的要求。无论如何,谢谢你。