我正在订单表上运行查询,以计算每个用户在 6 个月前一个月内的任何一天发出的请求总数(例如:2013 年 8 月)。
这工作正常:-
SELECT userid,firstname,surname,sum(IF(MONTH(date_placed) = MONTH(DATE_SUB(CURDATE(), INTERVAL 6 MONTH)) and YEAR(date_placed) = YEAR(DATE_SUB(CURDATE(), INTERVAL 6 MONTH)), 1,0))
FROM requests
WHERE homelib='SBC'
GROUP BY userid
ORDER BY surname;
但是由于 SQL
语法错误而失败:-
SELECT userid,firstname,surname,sum(IF(EXTRACT(YEAR_MONTH FROM date_placed) = EXTRACT(YEAR_MONTH FROM DATE_SUB(CURDATE(), INTERVAL 6 MONTH)), 1,0))
FROM requests
WHERE homelib='SBC'
GROUP BY userid
ORDER BY surname;
是否有更高效的 SQL 语句来执行此操作? 像这样:
YEAR_MONTH(date_placed) = YEAR_MONTH(DATE_SUB(CURDATE(), INTERVAL 6 MONTH))
它必须只查看 6 个月前任意一天的订单(例如:2013 年 8 月期间),并从查询运行时开始动态计算 6 个月前的订单。
最佳答案
据我所知,EXTRACT 不适用于日期算术。我不确定我的方法,但你可以尝试一下。这是查询:
选择
用户身份,
名,
姓,
sum(IF(date_format(date_placed,"%y-%m") = date_format(DATE_SUB(CURDATE(), INTERVAL 6 MONTH), "%y-%m"), 1,0))
来自请求
WHERE homelib='SBC'
按用户 ID 分组
按姓氏排序;
关于MySQL Extract 函数给出语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726237/