从现有表(T1)创建AGG表(T1_ByWeek)

时间:2016-03-04 12:09:05

标签: sql-server

我有一个表(T1),其中包含以下列(日期,商店,品牌,商品,价格)。我每天都有数据。我需要创建一个新表(T1_ByWeek),我想保存每周数据。 T1_byWeek中的列应为(WeekNr,Shop,Brand,Item,AvgPriceOfWeek)。

有人可以给我提示如何为T1_ByWeek编写SQL吗?

由于

1 个答案:

答案 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日期来计算(只有在您知道每周的每一天都有销售时才有效。)

在这两个方面,我更喜欢第二种方法,尽管构建起来有点困难。当然,你可以将两者结合起来并拥有所有三个领域。