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