Oracle SQL - сумма и групповые данные по неделям

У меня есть записи, связанные с датами:

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

Я знаю, как суммировать их для каждого дня, но как я могу суммировать их по неделям?

Ответ 1

Попробуйте это

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')

FIDDLE DEMO


Вывод:

+-----+-------+--------+
|YEAR | WEEK  | AMOUNT |
+-----+-------+--------+
|2013 | 11    | 18     |
|2013 | 13    | 3      |
+-----+-------+--------+

Ответ 2

Вы можете использовать функцию TRUNC для усечения даты в первый день недели. Есть несколько способов определения недели. Например, если вы хотите, чтобы первый день недели был в понедельник, вы можете IW форматировать, например:

select trunc(date, 'IW') week, sum(amount)
from YourTable
group by trunc(date, 'IW');

Вы также можете использовать TO_CHAR как ответ "@Vignesh Kumer".

Дело в том, что вы должны усекать дату на той же неделе в одно значение. Тогда группа по значению. Что это.

Ответ 3

Думаю, это тоже помогло бы...

 /* Weekly sum of values */
 SELECT SUM( Amount ) as Sum_Amt, 
 DATEPART (wk, Date) as WeekNum
 FROM databse_name.table_name
 GROUP BY DATEPART (wk, Date)
 ORDER BY WeekNum

 /* Monthly sum of values */
 SELECT SUM( Amount ) as Sum_Amt, 
 DATEPART (mm, Date) as MonNum
 FROM databse_name.table_name
 GROUP BY DATEPART (mm, Date)
 ORDER BY MonNum