SQL SQL-Abfrage, doppelte Datensätze ausnehmen?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

ich versuche gerade eine Datenbank-Abfrage zu erstellen, komme dabei
aber nicht zum Ziel. Leider habe ich nicht einmal ansatzweise eine Idee
zur Umsetzung.

SELECT id, datum, stadt FROM personen WHERE ...;

Das ist ein Beispiel meiner SQL-Abfrage.

Ergebnis, bspw.:

1, 2018-10-10, Essen
2, 2018-10-10, Krefeld
3, 2018-10-10, Düsseldorf
4, 2018-10-10, Essen
5, 2018-10-10, Essen
6, 2018-10-10, Krefeld
7, 2018-10-10, Düsseldorf
8, 2018-10-10, Düsseldorf

Jetzt möchte ich aber möglichst nur die letzten Datensätze der jeweiligen
Städte erhalten. Je Stadt also nur einen und zwar den letzten der über
dieser Stadt eingetragen wurde.

Bspw.:
5, 2018-10-10, Essen
6, 2018-10-10, Krefeld
8, 2018-10-10, Düsseldorf

Wie kann man so etwas möglichst einfach realisieren?

VG, David
 
SELECT DISTINCT ... ist das was Du suchst :)
 
  • Gefällt mir
Reaktionen: charmin
Dafür brauchst du einen Subselect.

SQL:
SELECT a.* FROM personen AS a WHERE a.id = (SELECT MAX(b.id) FROM personen AS b WHERE b.stadt = a.stadt);

Erklärung:
Der Subselect holt sich die höchste ID (was bei einer sauberen Tabellen stets der neueste Datensatz ist), wo die Stadt der Stadt entspricht, die gerade im äußeren Select geprüft wird. Entspricht die ID aus dem Subselect der ID des Datensatzes aus dem äußeren Select, so wird dieser Datensatz ausgeben.

muesler schrieb:
SELECT DISTINCT ... ist das was Du suchst :)

Nein, mit einem DISTINCT kriegt er nicht die letzten Datensätze. Er will den letzten Datensatz mit der jeweiligen Stadt haben (In dem Fall ID 5,6,8).
 
Zuletzt bearbeitet:
SQL:
SELECT MAX(Datum), Stadt FROM personen GROUP BY Stadt;

müsste eigentlich auch gehen.
 
DerZock schrieb:
müsste eigentlich auch gehen.

Das war in meiner Klasse ein gern gemachter Fehler. Wenn dann müsste es MAX(id) sein, aber auch das wäre faslch. Er gibt beim Datum das Datum vom ersten Datensatz mit Düsseldorf aus, bei Essen das erste mit Essen und bei Krefeld genau so.
 
Zuletzt bearbeitet:
Stimmt, ich dachte das Datum wär eine Art Erstelldatum. Habe nicht gesehen, dass das immer gleich ist ;)
 
  • Gefällt mir
Reaktionen: paccoderpster
Selbst wenn es nicht das Gleiche wäre, würde er bei MAX(datum) immer die erste ID mit der jeweiligen Stadt ausgeben. Hatte das gerade eben im Edit (weiß nicht, ob du das gelesen hast), doch dann ist mir mein Fehler aufgefallen. Er würde dann immer die erste ID ausgeben, die die jeweilige Stadt hat. Bei Essen dann 1, obwohl der Datensatz so aussieht, als wäre es die 5.
 
Zurück
Oben