2016-04-27 12 views
-3

SQL Serverの注文リストを週の日付でグループ化しようとしています。私は次のような結果を得るの下にSQLを使用した:SQL Group by Week日付

SELECT cast(datepart(wk, created) [week], count(1) [number of orders] 
FROM Orders 
GROUP BY datepart(wk, created) 

Week - Number of Orders 
15 - 305 
16 - 285 
17 - 428 

を私は何をしたいのか代わりに週番号を表示するので、私は、例えば、週の開始日を表示したいれます

Week -  Number of Orders 
11/04/2016 - 305 
18/04/2016 - 285 
25/04/2016 - 428 

+0

あなたの週の開始は日曜日か月曜日にいますか? – Quassnoi

+0

週は日曜日から始まりますが、月曜日も回答が得られると良いでしょう。 – user1786107

答えて

3

これは、もし上記

SELECT DATEADD(Week, DATEDIFF(week, 0, created), 0) [week], 
     count(1) [number of orders] 
FROM Orders 
GROUP BY DATEADD(Week, DATEDIFF(week, 0, created), 0) 

...私に月曜日を与えるあなたの月曜日を与え、これは日曜日にあなたを与える必要があります

DATEADD(Week, DATEDIFF(week, 0, created), -1) 
+1

これは近いと思いますが、それほど正しいとは限りません。私にとっては、月曜日から始まる1週間を返すようですが、その月曜日より前に始まる7日間に起こったアイテムを数えます。うーん。 – samthebrand

+1

@samthebrand私が覚えていることから、これはあなたの 'DateFirst'値が何に設定されているかによって決まります。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-datefirst-transact-sql – JamieD77

2
SELECT DATEADD(day, 1 - DATEPART(weekday, created), CAST(created AS DATE)), 
     COUNT(*) 
FROM Orders 
GROUP BY 
     DATEADD(day, 1 - DATEPART(weekday, created), CAST(created AS DATE)) 

SET DATEFIRSTを使用して、週の開始日を制御できます。

+0

WEEKDAYはDAX関数なので、うまくいきません。 TSQLに類似したものがありますか? – user1786107