Forum: PC-Programmierung SQL Problem


von Tim H. (timsen)


Lesenswert?

Hallo,

komme nicht weiter. Folgendes Problem:

tabelle_1 [id, req_id, date, spalte_1, spalte_2, spalte_3]

Ich hätte gern alle Datensätze (zumindest die id) einer Gruppierung nach 
req_id, von dierser das letzte Datum (max date).


SELECT
  id, req_id, max (date)
FROM
  tabelle_1
GROUP BY
  req_id

Fehler hier: die id fehlt in der GROUP BY Clause

Würde man die id mit reinehmen, erhält man jedoch wieder mehrere 
Datensätze zu einer req_id.

Wäre froh, wenn mir Jemand einen Tip geben könnte. Danke.

von Jan (Gast)


Lesenswert?

Mit einer subquery lässt sich das so machen:

SELECT id FROM tabelle_1 as t1 WHERE date = (SELECT MAX(date) FROM 
tabelle_1 as t2 WHERE t1.req_id = t2.req_id);

von tastendrücker (Gast)


Lesenswert?

Schreib am besten mal ein Beispiel, wie das Ergebnis aussehen soll.

von wesch (Gast)


Lesenswert?

entwender die Lösung von jan als korellierte Subquery...


...oder du musst die tabelle_1 halt 2 mal in der Fromklausel einbinden

FROM tabelle_1 t1,
     tabelle_1 t2

dann in WHERE-Klausel beide auf gleiche req_id matchen

WHERE t1.req_id = t2.req_id usw.

von Markus (Gast)


Lesenswert?

Wenn Du ein GROUP BY verwendest, musst Du alle Spalten, die angezeigt 
werden sollen auch im GROUP BY angeben:

SELECT id, req_id, max (date) FROM tabelle_1 GROUP BY req_id

sollte dann so aussehen

SELECT req_id, id, max(date) FROM tabelle_1 GROUP BY req_id, id

Date muss im GROUP nicht angegeben werden, da es von einer Funktion 
aufgerufen wirdn (max)

Allerdings weiß ich nicht, ob die funktion MAX mit einem GROUP 
funktioniert. Ansonsten probiers mal mit einem ORDER BY

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.