2017-02-02 10 views
0

Ich benutze diese folgende Abfrage hier, um meine Daten zu erhalten und zeigen den Wert wöchentlich, aber wenn es ein neues Jahr gibt und das Ergebnis Woche 50, 51, 52 of 2016 und Woche 1, 2, 3 of 2017 zum Beispiel zeigt, wird es order by Wochennummer ergeben in 1,2,3,50,51,52 was bedeutet, dass die Ergebnisse 2017 erscheinen vor 2016, wie ändere ich das?SQL Datepart (Woche), ORDER BY Jahr?

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

Ihre Abfrage enthält keine Order by Klausel ... –

+0

Was soll ich bestellen? weil das Datum nicht funktionierte:/@ZoharPeled –

+0

Es hängt von der möglichen '@ 0 AND @ 1'-Spanne ab. Kann es von Januar 2015 bis Januar 2017 reichen und was willst du, weil es so ist? – Serg

Antwort

5

Vielleicht nicht die eleganteste Lösung, aber man könnte auch nur das Jahr, in dem Feld Sie Gruppe von:

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)) 

oder (wahrscheinlich besser), so dass sie nur so behandeln, als völlig getrennte Felder:

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

gab mir diesen Fehler 'Es gab einen Fehler bei der Analyse der Abfrage. [Token Zeilennummer = 1, Token Zeilen Offset = 37, Token in Fehler = DATEPART] 'auf Ihrem letzten Beispiel! Was könnte das sein? –

+0

Verwenden Sie SQL Server Management Studio (SSMS)? – 3N1GM4

+0

SQL Server kompakt –

0

Sie könnten einen Auftrag von einem Gesamtergebnis des Jahres Teil hinzufügen:

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; 

Die oben jedoch zusammen Daten aus derselben Woche Anzahl aggregieren, auch wenn sie in verschiedenen Jahr fallen (Wahrscheinlich nicht, was Sie wollen). Wenn Sie die Daten der verschiedenen Jahre getrennt halten möchten, können Sie beispielsweise eine Jahresspalte zu Ihrer Ausgabe hinzufügen.

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

Würde dies noch Gruppe Datensätze aus verschiedenen Jahren zusammen, wenn sie auf die gleiche Woche innerhalb ihrer jeweiligen Jahre fielen? – 3N1GM4

Verwandte Themen