我正在尝试获取过去一年到上个月的最后日期(即不包括当月)的记录。这是我的查询:
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日的记录。我们该怎么做?
答案 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)
希望获得帮助