Oracle SQL—按周对数据进行求和和和分组

Oracle SQL—按周对数据进行求和和和分组,sql,oracle,aggregate-functions,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 我知道如何总结每天的数据,但我怎么能按周总结呢?`试试这个 SELECT to_char(DATE - 7/24,'IYYY'), to_char(DATE - 7/24,'IW'),SUM(AMOUNT) FROM YourTable GROUP BY

我有与日期相关的记录:

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
我知道如何总结每天的数据,但我怎么能按周总结呢?`

试试这个

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


产出将是:

您可以使用函数将日期截断为一周的第一天。有。例如,如果要将一周的第一天视为星期一,则可以
IW
格式,如下所示:

select trunc(date, 'IW') week, sum(amount)
from YourTable
group by trunc(date, 'IW');
您还可以
TO_CHAR
作为“@Vignesh Kumer”的答案


关键是,您应该将同一周的日期截断为一个值。然后按值分组。就这样。

我想这也会有帮助

 /* 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

很好用!将其修改为选择为_char(日期-7/24,'yyyyyw'),将表组中的SUM(金额)改为_char(日期-7/24,'yyyyyw')。我不明白为什么会出现“-7/24”。为什么要减去7小时?这有什么好处?事实上,从周一上午减去7小时可能会将日期推到周日,从而显示前一周,这是错误的。我建议您提到,在这种情况下,重要的是
trunc(date,'iyy')
并按它分组(类似于Vignesh的回答),否则,不同年份的同一周将被归为一周。问题是关于Oracle SQL(pl/SQL),它没有函数DATEPART。我假设您的代码是针对MS SQL Server(tsql)的?
 /* 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