从每日表中按周进行SQL求和



我有一张产品销售表。销售额是每天。像

product    date         sales
1          '2013-11-01' 100
1          '2013-11-02' 423
1          '2013-11-03' 700
1          '2013-11-04' 233
2          '2013-11-01' 623
2          '2013-11-02' 451
2          '2013-11-03' 9000

我想得到一个查询,显示每周的销售额所以类似于:

product     week ending     sales
1           '2013-11-01'    10000 
1           '2013-11-08'    15000
2           '2013-11-01'    4900
2           '2013-11-08'    30000

我不知道在总结时我是如何得到这个每周分组的。

我正在使用teradata

如果使用Teradata 14,则可以利用数据库TD_SYSFNLIB:中的DayNumber_Of_Week()函数

SELECT s.Product
     , s.Date + (7-DayNumber_Of_Week(s.date)) AS WeekEndingDate /* Saturday */
     , SUM(s.Sales) AS Sales
  FROM sales AS S
GROUP BY 1,2;

这也适用于Teradata 13.10。

使用Sys_Calendar:

SELECT s.Product
     , s.DATE + (7-c.Day_Of_Week) AS WeekEndingDate /* Saturday */
     , SUM(s.Sales) AS Sales
  FROM sales AS S
 INNER JOIN
       Sys_Calendar.Calendar c
    ON S.date = c.calendar_date
GROUP BY 1,2;

我对TERADATA知之甚少,但我相信您可以利用sys_calendar.calendar表,比如:

SELECT s.Product, c.week_of_year, SUM(s.sales) AS Sales
FROM sales AS s
JOIN sys_calendar.calendar as C
  ON s.date = c.date

你也需要把年份放在里面,这样就不会把2013年的第一周和2012年的第1周放在一起。

最新更新