我正在尝试重构一个MySQL查询,以便在DB2/iSeries上运行,并且我得到了错误使用标记的持续时间无效。
看一看文档,我觉得下面的用法应该是有效的。
我是不是遗漏了什么?
SELECT
IFNULL(SUM(CASE WHEN CURDATE() BETWEEN n.start_date AND n.expire_date
THEN 1 ELSE 0 END), 0) AS current,
IFNULL(SUM(CASE WHEN CURDATE() - 365 DAY BETWEEN n.start_date AND n.expire_date
THEN 1 ELSE 0 END), 0) AS prior,
IFNULL(SUM(CASE WHEN '2018-12-31' - 7 DAY BETWEEN n.start_date AND n.expire_date
THEN 1 ELSE 0 END), 0) AS full
FROM salesnumbers;发布于 2018-11-26 14:32:38
问题可能是您的日期间隔。尝试使用CURRENT DATE而不是CURDATE()。此外,您还可以在DB2中直接列出日期间隔+/-某个金额。
SELECT
COUNT(CASE WHEN CURRENT DATE BETWEEN n.start_date AND n.expire_date
THEN 1 END) AS current,
COUNT(CASE WHEN CURRENT DATE - 1 YEAR BETWEEN n.start_date AND n.expire_date
THEN 1 END) AS prior,
COUNT(CASE WHEN DATE('2018-12-31') - 7 DAY BETWEEN n.start_date AND n.expire_date
THEN 1 END) AS full
FROM salesnumbers;请注意,我用条件计数替换了您的条件和。这使代码稍微简洁一些,因为我们不必详细说明一个显式的ELSE条件(默认情况是NULL)。
https://stackoverflow.com/questions/53483227
复制相似问题