Letzten Wert aus einer Gruppe (group by) auslesen

incubus77

Grünschnabel
Hallo allerseits,

ich habe ein kleines Problem und verzweifle langsam. Ich habe eine Tabelle die wie folgt aufgebaut ist:

ID | Webseite | Wert 1 | Wert 2 | usw.

1 | http://www.xyz.de ..
2 | http://www.xyz.de ..
3 | http://www.123.de ..
4 | http://www.123.de ...
5 | http://www.125.de...

Ich möchte nun immer die gesamte Zeile von einer Webseite auslesen mit, und zwar immer die mit dem höchsten Wert (als Bsp. ID).

Folgenden Ansatz hatte ich:

Code:
SELECT * , max( ID )
FROM websites
GROUP BY Webseite

Leider übenimmet er die Werte nicht korrekt. Wo ist mein Denkfehler?

Bin für jeden Tipp dankbar.

Späte Grüße

incubus
 
Hallo, bin zwar keine Leuchte in SQL aber ich glaub soviele möglichkeiten gibt es dabei nicht. Hier mal mein Ansatz.
SQL:
SELECT id
FROM website
ORDER BY id ASC   <!-- Hier Ordnen wir alles Nach ID unzwar absteigende.
LIMIT 0 , 1 <!-- Damit wir auch nur den Ersten Wert erhalten setzen wir noch ein Limit.
Denke das könnte funktionieren, ist aber ungetestet.

PS: Weiß nicht genau wie Kommentare in SQL aussehen müssen. Also nicht hauen^^.

Mfg
 
Zuletzt bearbeitet von einem Moderator:
Und wenn man LIMIT nicht mag oder man mit einer DB arbeitet dei LIMIT nicht unterstützt:
SQL:
SELECT *
FROM websites
WHERE id IN (SELECT MAX(id) FROM websites)
 
Zuletzt bearbeitet von einem Moderator:
Ich hoffe, du kannst in deiner FROM-Klausel ein SELECT verwenden, dann klappt vielleicht folgendes:
SQL:
SELECT * FROM websites
WHERE id IN
( SELECT mId FROM 
  SELECT Webseite, MAX(id) mId
  FROM websites
  GROUP BY Webseite
)
 
Zuletzt bearbeitet von einem Moderator:
Das Problem ist aber, dass er auch Spalten ausgeben will, für die er keine Aggregatfunktion verwenden kann. Deshalb muss er erst in einer Unterabfrage die gewünschten Id's ermitteln; diese Id-Liste kann dann in der WHERE-Klausel verwendet werden, um die gewünschten Datenzeilen in toto abrufen zu können.
 
Hallo,

leider funktioniert die vorgeschlagene Lösung von Vereth nicht., aber ich denke dies müsste der richtige Ansatz sein.

Code:
 SELECT * FROM websites
WHERE ID
IN (
  SELECT Webseite, MAX( ID ) AS mId
  FROM websites
  GROUP BY Webseite
)

#1241 - Operand should contain 1 column(s)

Ich benutze MySQL-Client-Version: 5.0.33. Ich hoffe zumindest das

Code:
SELECT mId FROM
  SELECT Webseite, MAX(id) mId

ein Fehler war?

Viele Grüße

incubus
 
MySQL unterstützt auch Unterabfragen in der FROM-Klausel. Mein Fehler war, dass ich die Klammern und die AS-Klausel vergessen habe. Es muss natürlich heißen:
SQL:
SELECT * FROM websites
WHERE id IN
( SELECT mId FROM 
  ( SELECT Webseite, MAX(id) mId
    FROM websites
    GROUP BY Webseite
  ) AS WebseiteId
)

Das Innere SELECT sucht die IDs deiner Weibseiten mittels des GROUP BY heraus, das mittlere filtert die IDs heraus, damit du nur eine Spalte in deiner Liste hast (siehe Fehlermeldung) und das äußere SELECT holt die Daten für die Zeilen mit der ID deiner IN-Liste.
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück