SQL从每日表中按周计算

时间:2013-11-27 23:31:16

标签: sql sum teradata

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

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

2 个答案:

答案 0 :(得分:3)

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

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;

答案 1 :(得分:1)

我对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年第1周与2012年第1周分组。