web-dev-qa-db-fra.com

Oracle SQL - Somme et groupe de données par semaine

J'ai des enregistrements liés aux dates:

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

Je sais comment les résumer pour chaque jour, mais comment pourrais-je les résumer par semaine? »

16
royskatt

Essaye ça

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


La sortie serait:

+-----+-------+--------+
|YEAR | WEEK  | AMOUNT |
+-----+-------+--------+
|2013 | 11    | 18     |
|2013 | 13    | 3      |
+-----+-------+--------+
26
Vignesh Kumar A

Vous pouvez utiliser TRUNC function pour tronquer la date au premier jour de la semaine. Il y a quelques façons de définir semaine . Par exemple, si vous souhaitez que le premier jour de la semaine soit le lundi, vous pouvez utiliser le format IW, comme ceci:

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

Vous pouvez également utiliser TO_CHAR comme réponse de "@Vignesh Kumer".

Le fait est que vous devez tronquer la date de la même semaine en une seule valeur. Puis groupe par la valeur. C'est tout.

26
ntalbs

Je suppose que cela aiderait aussi ...

 /* 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
0
Manoj Kumar