Oracle SQL - 按周计算总和和组数据

roy*_*att 20 sql oracle aggregate-functions

我有与日期有关的记录:

DATE         AMOUNT
16.03.2013   3
16.03.2013   4
16.03.2013   1
16.03.2013   3
17.03.2013   4
17.03.2014   3
Run Code Online (Sandbox Code Playgroud)

我知道如何总结每一天,但我怎么能在一周之前总结一下呢?

nta*_*lbs 30

您可以使用TRUNC函数将日期截断到一周的第一天.定义周的方法几种.例如,如果您想要将星期的第一天视为星期一,则可以IW格式化,如下所示:

select trunc(date, 'IW') week, sum(amount)
from YourTable
group by trunc(date, 'IW');
Run Code Online (Sandbox Code Playgroud)

你也可以TO_CHAR作为"@Vignesh Kumer"的答案.

关键是你应该将同一周的日期截断为一个值.然后按值分组.而已.

  • 我建议你提一下,在这种情况下,重要的是'截断(日期,'IYYY')`并按其分组(类似于Vignesh的答案),否则不同年份的同一周将被分组为一个. (4认同)

Vig*_*r A 28

试试这个

SELECT to_char(DATE - 7/24,'IYYY'), to_char(DATE - 7/24,'IW'),SUM(AMOUNT)
FROM YourTable
GROUP BY to_char(DATE - 7/24,'IYYY'), to_char(DATE - 7/24,'IW')
Run Code Online (Sandbox Code Playgroud)

FIDDLE DEMO


输出将是:

+-----+-------+--------+
|YEAR | WEEK  | AMOUNT |
+-----+-------+--------+
|2013 | 11    | 18     |
|2013 | 13    | 3      |
+-----+-------+--------+
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么"-7/24".为什么减去7个小时?这有什么好处?事实上,从星期一早上减去7个小时可能会把日期推到星期日,因此显示前一周,这是错误的. (4认同)