在 oracle SQL 中选择和分组多个日期范围

豪尔赫·尼塔莱斯

我想选择相同的日期范围并按年份对它们进行分组。在这种情况下,我想要客户每年 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章