2017-02-02 88 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