我想选择相同的日期范围并按年份对它们进行分组。在这种情况下,我想要客户每年 9 月和 10 月的账单总额。
我现在的代码:
SELECT c.name, c.telefonnumber, TO_CHAR(b.billdate, 'YYYY'), sum(b.sume)
FROM customer c, bill b
WHERE b.customerId = c.id
AND b.datum BETWEEN '01.10.2016' AND '30.09.2016'
GROUP BY c.name, c.telefonnumber, TO_CHAR(b.billdate, 'YYYY');
此查询完美运行,但是当我想再添加一年时,结果是无限循环:
AND b.datum BETWEEN '01.10.2016' AND '30.09.2016'
OR b.datum BETWEEN '01.10.2015' AND '30.09.2015'
我也尝试以字符串的方式来做。在这种情况下,当我只查找 9 月的结果时,它可以完美运行,但是一旦我添加OR,它就会再次成为一个无限循环:
AND TO_CHAR(kp.tmstmp) LIKE '%.09.%'
OR TO_CHAR(kp.tmstmp) LIKE '%.10.%'
我知道我不知何故在 OR 运算符中遗漏了一些东西,但由于这只会发生在我的日期上,我有点困惑。
这个查询工作正常并返回 0 行,我猜 - 正是 01.10.2016 和 30.09.2016 之间的日期数:)
如果您想检查多个范围,您应该将它们括在大括号中:
... and
(
b.datum between date '2016-10-01' and date '2017-09-30' or
b.datum between date '2015-10-01' and date '2016-09-30' or
...
) and
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句