SQL 日期部分(周),按年排序?
SQL Datepart (week), ORDER BY year?
我在这里使用以下查询来获取我的数据并每周显示值,但是,当有新的一年时,结果将显示周 50, 51, 52 of 2016
和周 1, 2, 3 of 2017
,例如,它将 order by
周数导致 1,2,3,50,51,52
这意味着 2017 年的结果出现在 2016 年之前,我该如何更改它?
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)
您可以按年部分的总计添加订单:
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;
也许不是最优雅的解决方案,但您可以在分组依据的字段中包含年份:
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)
我在这里使用以下查询来获取我的数据并每周显示值,但是,当有新的一年时,结果将显示周 50, 51, 52 of 2016
和周 1, 2, 3 of 2017
,例如,它将 order by
周数导致 1,2,3,50,51,52
这意味着 2017 年的结果出现在 2016 年之前,我该如何更改它?
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)
您可以按年部分的总计添加订单:
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;
也许不是最优雅的解决方案,但您可以在分组依据的字段中包含年份:
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)