我有一个表(T1),其中包含以下列(日期,商店,品牌,商品,价格)。我每天都有数据。我需要创建一个新表(T1_ByWeek),我想保存每周数据。 T1_byWeek中的列应为(WeekNr,Shop,Brand,Item,AvgPriceOfWeek)。
有人可以给我提示如何为T1_ByWeek编写SQL吗?
由于
答案 0 :(得分:0)
您可以使用DATEPART从日期中提取周数。
我已将您的SQL更新为包含。
示例强>
Insert into [T1_ByWeek]
(
WeekNr,
Shop,
Brand,
Item,
Price
)
select
DATEPART(WEEK, Date),
Shop,
Brand,
Item,
Avg(Price)
From
T1
Where
Date BETWEEN '2016-02-22' and '2016-02-28'
Group by
DATEPART(WEEK, Date),
Shop,
Brand,
Item
;
我可以看到你的设计出现一个小问题。每年都会有一周,两天,三天等。在查看您的表格时,您将无法分辨2015年,2016年或每当的第2周。有几种方法可以解决这个问题。
方法一
添加年份列。 DATEPART(YEAR, [Date])
将提取年份。
方法二
将WeekNr替换为WeekCommencing。这将是一个始终包含一周中第一天的日期列。您可以通过添加calendar table或查找MIN日期来计算(只有在您知道每周的每一天都有销售时才有效。)
在这两个方面,我更喜欢第二种方法,尽管构建起来有点困难。当然,你可以将两者结合起来并拥有所有三个领域。