SQL GROUP BY
-
Hi Leute,
ich habe hier eine MS SQl-Datenbank. Dort stehen Einträge drin, die folgendermaßen aufgebaut sind:
ID, Datum, StundenIch würde jetzt gerne einen select machen, der mir alle mit der selben ID und dem selben Monat zusammenfasst, hab aber keine Ahnung, wie... Wenn ich alle mit dem exakt gleichen Datum zusammenfassen wollen würde, würde ich das ja so machen:
SELECT ID, Datum, SUM(Stunden) AS TOTAL FROM MyTable GROUP BY ID, DATUM
Aber wie mach ich es jetzt, wenn ich nicht nach dem exakten Datum sondern nach dem Monat gruppieren möchte?
-
Gibts keine to_char()-Funktion, o.Ä. wie in Oracle?
SELECT id, to_char('MM',datum), sum(stunden) AS total FROM mytable GROUP bY id, to_char('MM',datum);
MfG SideWinder
-
GROUP BY id, MONTH(datum)
Sollte eigentlich gehen... Kann sein, dass die Funktion etwas anders heißt
// Edit: Jup, Month ist richtig - Obs funktioniert, musst du aber selbst testen
hab gerade kein mySQL hier.
-
so tut das:
SELECT ID, MONTH(Datum) AS Month, YEAR(Datum) AS YEAR, SUM(Hours) AS TOTAL FROM mytable GROUP BY id, MONTH(datum), YEAR(datum)
-
Dann kannst auch
SELECT ID, MONTH(Datum) AS Month, YEAR(Datum) AS Year SUM(Hours) AS TOTAL FROM mytable GROUP BY id, Month, Year
schreiben
-
ne. wieso sollte ich?
-
Weil du dann die doppelte "Berechnung" sparst. Ich bin mir nicht sicher wie weit
mySQL das herausoptimieren kann.
-
Mir eigentlich auch egal, was mySQL macht, ich benutze den MS SQL
Jedenfalls geht es nicht, bekommen einen Syntaxfehler für Month.
Man kann offensichtlich nicht nach Spalten gruppieren lassen, die erst in der SQL-Anweisung definiert werden.
-
Mal nur so nebenbei. Wenn deie Tabelle so aussieht dann hast du ein gravierendes Problem.
Die Regel Nr.1 bei einem RDBMS ist: Jeder Datensatz muss eindeutig identifizierbar sein.
Sollte dies nicht der Fall sein kann es zu unvorhersehbaren Ergebnissen in der Ergebnissmenge kommen.
-
Soll ich also noch ne Spalte mit nem Autoincrement einfügen?
Was kann es denn für unvorhergesehene Ergebnisse geben?
-
Vor allem Lösch- und Updateprozesse können riskant werden. Und selbst wenn es
jetzt noch nicht notwendig sein kann: Jeder Datensatz in einer Datenbank sollte
eindeutig identifierbar sein - das erhöht die Geschwindigkeit auch gleich um
ein Vielfaches.