我想选择相同的日期范围并按年份分组。在这种情况下,我想要从9月到10月每年的客户账单总额。
我的代码现在:
"$data": "/groups/$keys"
这个查询工作正常,但是当我想再添加一年时,结果就是无限循环:
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');
我也尝试过以String方式进行。在这种情况下,当我只查找9月的结果时,它可以完美地运行,但是只要我添加 OR ,它就会再次成为无限循环:
AND b.datum BETWEEN '01.10.2016' AND '30.09.2016'
OR b.datum BETWEEN '01.10.2015' AND '30.09.2015'
我知道我在某种程度上错过了OR运算符中的某些内容,但由于这只发生在我的日期,所以我有点困惑。
答案 0 :(得分:1)
此查询正常工作并返回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
...
答案 1 :(得分:0)
看起来WHERE
子句中的日期条件的措辞不正确。试试这个:
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 TO_DATE('01.10.2016', 'DD.MM.YYYY') AND
TO_DATE('30.09.2016', 'DD.MM.YYYY') OR
b.datum BETWEEN TO_DATE('01.10.2015', 'DD.MM.YYYY') AND
TO_DATE('30.09.2015', 'DD.MM.YYYY'));
我做了两处更改,即确保日期检查发生在一个逻辑位置,外围括号括起来,并且我们在与datum
列进行比较时使用了真正的日期。