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

时间:2019-05-08 06:02:12

标签: 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)

此查询获取2018年5月1日至2019年4月8日的记录。

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

我想排除当月记录,因此查询应该返回截至2019年4月30日的记录。我们该怎么做?

3 个答案:

答案 0 :(得分:1)

您必须使用帮助LAST_DAY()函数正确计算范围的第一天和最后几天。例如:

计算范围的第一天

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

输出:

  

2018-05-01

计算范围的最后一天

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)

答案 1 :(得分:0)

要获取上个月的数据:

b=matrix(c(4,5,6,7,8,9,10,11,12,1,2,3), ncol=3, byrow=TRUE)
> b
     [,1] [,2] [,3]
[1,]    4    5    6
[2,]    7    8    9
[3,]   10   11   12
[4,]    1    2    3

为什么?首先请注意,where customer_date < curdate() + interval (1 - day(curdate()) day 上没有函数调用。因此,此表达式与索引兼容,可以使用索引。

第二,此结构适用于日期和日期/时间。这非常方便,因为如果一列具有时间成分,这种情况可能并不总是显而易见的(人们不太喜欢命名列来捕获此信息)。

您声称“ 12个月前”部分有效。在我看来,这并不正确。完整的逻辑:

customer_date

答案 2 :(得分:-1)

SELECT `customer_id`, `customer_name`, `customer_date` FROM `customers` WHERE
MONTH(`customer_date`) <= (CURDATE() - INTERVAL 1 MONTH) AND 
MONTH(customer_date) >= (CURDATE() - INTERVAL 12 MONTH)

希望获得帮助