2017-02-02 38 views
0

我在這裏使用以下查詢來獲取我的數據並顯示每週價值,但是,當有新的一年,結果將顯示周50, 51, 52 of 2016和周1, 2, 3 of 2017例如,它將order by週數導致1,2,3,50,51,52這意味着2017年的結果出現在2016年之前,我該如何改變這一點?SQL Datepart(week),ORDER BY year?

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

您的查詢不包含order by子句... –

+0

應我命令是什麼?因爲迄今爲止沒有工作:/ @ZoharPeled –

+0

這取決於可能'@ 0和@ 1'跨度。它可以跨越2015年1月到2017年1月,你想要的結果是這樣嗎? – Serg

回答

5

也許不是最完美的解決方案,但你可以只包括當年在場上你GROUP BY:

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 Server Compact –

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