2017-02-02 7 views
0

ここで私のデータを取得し、毎週の値を表示するためにこの次のクエリを使用します。ただし、新しい年があり、結果が週50, 51, 52 of 2016と週1, 2, 3 of 2017と表示される場合、の週番号は1,2,3,50,51,52 2017年の結果は2016年より前に表示されますが、どうすれば変更できますか?SQLのDatepart(week)、ORDER BY年ですか?

SELECT 
    DATEPART(wk, date) AS number, 
    SUM((kg * rep * sett)) AS weight, 
    SUM(kg/max * rep * sett) AS avg, 
    SUM((rep * sett)) AS reps, 
    MAX(kg/max) AS peak 
FROM 
    Test 
WHERE 
    date BETWEEN @0 AND @1 AND exercise < 4 
GROUP BY DATEPART(wk, date) 
+1

あなたのお問い合わせには注文句が含まれていません... –

+0

ご注文はどうすればよいですか?/@ ZoharPeled –

+0

これは可能な '@ 0 AND @ 1'スパンに依存します。 jan2015からjan 2017に及ぶことができますか?その結果、あなたが望むものは何ですか? – Serg

答えて

5
おそらく

ない最もエレガントなソリューションが、あなただけのことでフィールドをグループで年間含めることができます

SELECT 
    CONVERT(VARCHAR,DATEPART(year, date)) + '_' + CONVERT(VARCHAR,DATEPART(wk, date)) AS Year_Week, 
    SUM((kg * rep * sett)) AS weight, 
    SUM(kg/max * rep * sett) AS avg, 
    SUM((rep * sett)) AS reps, 
    MAX(kg/max) AS peak 
FROM 
    Test 
WHERE 
    date BETWEEN @0 AND @1 AND exercise < 4 
GROUP BY CONVERT(VARCHAR,DATEPART(year, date)) + '_' + CONVERT(VARCHAR,DATEPART(wk, date)) 
ORDER BY CONVERT(VARCHAR,DATEPART(year, date)) + '_' + CONVERT(VARCHAR,DATEPART(wk, date)) 

か(おそらくより良い)、単に完全に別々のフィールドとして扱う:

SELECT 
    DATEPART(year, date) AS Year, 
    DATEPART(wk, date) AS Week, 
    SUM((kg * rep * sett)) AS weight, 
    SUM(kg/max * rep * sett) AS avg, 
    SUM((rep * sett)) AS reps, 
    MAX(kg/max) AS peak 
FROM 
    Test 
WHERE 
    date BETWEEN @0 AND @1 AND exercise < 4 
GROUP BY DATEPART(year, date), DATEPART(wk, date) 
ORDER BY DATEPART(year, date), DATEPART(wk, date) 
+0

私にこのエラーが表示されました。「クエリの解析中にエラーが発生しました。あなたの最後の例では[トークン行番号= 1、トークン行オフセット= 37、トークンはエラー= DATEPART]です!それは何でしょうか? –

+0

SQL Server Management Studio(SSMS)を使用していますか? – 3N1GM4

+0

SQLサーバーのコンパクト –

0

あなたは年の部分の集計にすることによって順序追加することができます。しかし、あなたが望むものおそらくない(彼らは別の年に落ちる場合でも、同じ週番号から一緒にデータを集計

SELECT 
    DATEPART(wk, date) AS number, 
    SUM((kg * rep * sett)) AS weight, 
    SUM(kg/max * rep * sett) AS avg, 
    SUM((rep * sett)) AS reps, 
    MAX(kg/max) AS peak 
FROM 
    Test 
WHERE 
    date BETWEEN @0 AND @1 AND exercise < 4 
GROUP BY DATEPART(wk, date) 
order by max(datepart(year,date)), number; 

上記の)。異なる年のデータを別々に保管したい場合は、たとえば、年の列を出力に追加することができます。

SELECT 
    datepart(year,date) as year, 
    DATEPART(wk, date) AS number, 
    SUM((kg * rep * sett)) AS weight, 
    SUM(kg/max * rep * sett) AS avg, 
    SUM((rep * sett)) AS reps, 
    MAX(kg/max) AS peak 
FROM 
    Test 
WHERE 
    date BETWEEN @0 AND @1 AND exercise < 4 
GROUP BY datepart(year,date), DATEPART(wk, date) 
order by year, number; 
+0

)の場合でも、年ごとに注文する必要があります。 – 3N1GM4