SQL - Agregatfunktion und Gruppierung
Hallo zusammen, Könnt ihr mir vielleicht weiterhelfen?
Dazu zuerst ein Beispiel:
Wie ihr vielleicht ja wisst, funktioniert das nicht, da ich nicht nach einem Wildcard gruppieren kann. Die Tabelle 1 hat jedoch 100 Spalten, das heißt ich komme nicht darum herum, diese 100 Spalten zwei mal nieder zu schreiben? (Einmal nach SELECT und einmal bei GROUP BY)
Gibt es auch noch eine andere Möglichkeit?
Danke vielmals,
Michael.
Dazu zuerst ein Beispiel:
SELECT table1.*, max(table2.datum)
FROM table1 LEFT JOIN table2 ON table1.uid = table2.table1_uid
GROUP BY table1.*
Wie ihr vielleicht ja wisst, funktioniert das nicht, da ich nicht nach einem Wildcard gruppieren kann. Die Tabelle 1 hat jedoch 100 Spalten, das heißt ich komme nicht darum herum, diese 100 Spalten zwei mal nieder zu schreiben? (Einmal nach SELECT und einmal bei GROUP BY)
Gibt es auch noch eine andere Möglichkeit?
Danke vielmals,
Michael.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 160011
Url: https://administrator.de/contentid/160011
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
ich kann dir zwar keine andere Möglichkeit nennen,
aber vlt. sagst du mal in etwa, was die Tabellen enthalten bzw. was nach dem select rauskommen soll.
Weil nach 100 Spalten zu gruppieren scheint für mich auf den ersten Blick ziemlich unsinnig. ( Berichtige mich, wenn ich falsch liege! )
Du willst eig. nur zu jeder Zeile in Tab.1 den Max.-Wert zu tab2.Datum?
David
Edit: subselect?
ich kann dir zwar keine andere Möglichkeit nennen,
aber vlt. sagst du mal in etwa, was die Tabellen enthalten bzw. was nach dem select rauskommen soll.
Weil nach 100 Spalten zu gruppieren scheint für mich auf den ersten Blick ziemlich unsinnig. ( Berichtige mich, wenn ich falsch liege! )
Du willst eig. nur zu jeder Zeile in Tab.1 den Max.-Wert zu tab2.Datum?
David
Edit: subselect?
Moin Michael,
klar gibts die. Du gruppierst ja eigentlich nur in table2, also kannst Du das dort erledigen und die Verknüpfung mit table1 dann erledigen:
Oder Du liest die Werte aus table1 und holst dann genau dazu den aggregierten Wert:
Du hast nicht verraten, welche DB Du verwendest, aber eins davon sollte bestimmt auch bei Dir laufen.
Gruß, Mad Max
klar gibts die. Du gruppierst ja eigentlich nur in table2, also kannst Du das dort erledigen und die Verknüpfung mit table1 dann erledigen:
SELECT table1.*, tab2.datum
FROM table1 LEFT JOIN (select table1_uid, max(datum) as datum from table2 group by table1_uid) as tab2 ON table1.uid = tab2.table1_uid
Oder Du liest die Werte aus table1 und holst dann genau dazu den aggregierten Wert:
SELECT table1.*, (select max(datum) from table2 where table1_uid = table1.uid)
FROM table1
Du hast nicht verraten, welche DB Du verwendest, aber eins davon sollte bestimmt auch bei Dir laufen.
Gruß, Mad Max