我有一张产品销售表。销售额是每天。像
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周放在一起。