2016-03-04 47 views
-4

我有一個包含以下列(日期,商店,品牌,商品,價格)的表格(T1)。我每天都有數據。我需要創建一個新表格(T1_ByWeek),我想要保存每週數據。 T1_byWeek中的列應該是(WeekNr,Shop,Brand,Item,AvgPriceOfWeek)。從現有表格(T1)創建AGG表格(T1_ByWeek)

有人能給我提示如何爲T1_ByWeek編寫SQL嗎?

感謝

+1

歡迎來到SO!我認爲你的問題已被低估,因爲這不是一個代碼編寫服務。不過,我們可以幫助您解決錯誤。有一個去,如果它不工作發佈你的代碼在這裏。請記住包含您收到的任何錯誤消息。您可能想要研究的一些主題包括:[GROUP BY](https://msdn.microsoft.com/en-us/library/ms177673.aspx),[聚合函數](https://msdn.microsoft.com/ en-GB/library/ms173454.aspx)和[Date Time Functions](https://msdn.microsoft.com/zh-CN/library/ms186724.aspx)。 –

+0

我使用了以下SQL,但是我需要T1_ByWeek中的另一列作爲週數。任何幫助 插入[T1_ByWeek] \t店 \t,品牌 \t,項目 \t,價格 選擇 \t店 \t,品牌 \t,項目 \t,AVG(價格) \t從T1 Where Date BETWEEN'2016-02-22'and'2016-02-28' Group by Shop,Brand,Item – Ramaq

+0

快速提示未來,提供更多信息時e提出原來的問題,而不是添加評論。人們更容易看到你想要的東西。 –

回答

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 
; 

我可以看到一個小問題,你的設計。每年都會有一週1,2,3等。在看你的桌子時,你無法分辨出2015年,2016年或者任何時候的第2周。有幾種方法可以解決這個問題。

方法一

添加一年列。 DATEPART(YEAR, [Date])將提取年份。

方法二

與WeekCommencing更換WeekNr。這將是一個始終包含一週的第一天的日期列。您可以通過添加calendar table或通過查找MIN日期來計算(只有在您知道每週的每一天都會有銷售時,這才起作用)。

在這兩個我更喜歡第二種方法,雖然它有點難以建立。當然,你可以將兩者結合起來,並擁有三個領域。

+0

謝謝,它運作良好。現在問題是,我想每個星期一運行這個專家。我應該如何寫在這個代碼的命令(哪裏日期之間........? – Ramaq

+0

您可以使用[GETDATE](https://msdn.microsoft.com/zh-CN/library/ms188383.aspx)返回當前日期。 [DATEADD](https://msdn.microsoft.com/en-GB/library/ms186819.aspx)可用於計算開始日期。兩者都返回一個日期時間。要刪除時間部分,您可以[CAST](https://msdn.microsoft.com/zh-CN/library/ms187928.aspx)到日期。 SELECT CAST(GETDATE()AS DATE)As EndDate,CAST(DATEADD(DAY,-6,GETDATE())AS DATE)AS StartDate;'。最後你可以[接受這個答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),如果它有幫助! ;) –

+0

哦,我忘了;如果您運行除Express以外的任何版本,則可以使用[SQL Agent](https://msdn.microsoft.com/zh-cn/library/ms189237.aspx)安排您的查詢。 –