MySQL Extract 函数给出语法错误

标签 mysql date

我正在订单表上运行查询,以计算每个用户在 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/

相关文章:

php - 哪里方法在 Doctrine 查询生成器中不起作用?

mysql - 普通字段像 Zerofill 字段一样返回

php - Symfony 2 : INNER JOIN on non related table with doctrine query builder

javascript - 无论使用哪个运算符,日期比较始终返回 false

java - 使用未正确解析的 DateFormat 将字符串解析为日期

java - 在 Java 中获取 GMT 时间

php - 当我使用 PHP MySQL 查询时,DISTINCT 关键字不起作用

mysql - 在 CREATE USER 中使用标识符作为密码

java - 在 java 中转换 thu jul 05 10 :30:00 ist 2012 format into 2012-07-11 10:30:00. 0 格式

javascript - 用于日期转换的固定日期