Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL größter Datensatz einer Gruppe selektieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL größter Datensatz einer Gruppe selektieren

    Hallo zusammen,

    mal angenommen, ich habe eine Tabelle Autos, in der ich für einen Gebrauchtwagenhändler alle 10.000 Autos, die er auf dem Hof stehen hat, speichere. Zu jedem Auto gibt es unter anderem das Kennzeichen, den Kilometerstand und das Baujahr. Ich möchte jetzt ein SELECT formulieren, so dass ich eine nach Baujahr gruppierte Antwort bekomme, die mir aber immer das Auto anzeigt, welches die meisten km gefahren hat.

    Bei der Anfrage

    SELECT kennzeichen, baujahr, MAX(kilometer), kilometer FROM autos WHERE baujahr BETWEEN 2000 AND 2005 GROUP BY baujahr

    erhalte ich als Ergebnis aber nicht den expliziten Datensatz aus der Tabelle, sondern nur irgendeinen:

    AB-CD 19, 2000, 193.222, 102.345
    EF-GH 23, 2001, 201.100, 109.875

    Der Wagen AB-CD 19 hat also 102.345 km gelaufen und im Jahr 2000 hat der Wagen mit der höchsten Laufleistung satte 193.222 km auf dem Buckel, ich möchte aber nun in der Tabelle auch angezeigt bekommen, welcher Wagen denn nun der älteste Ist, also etwas wie

    JK-LM 83, 2000, 193.222, 193.222

    Ich will also aus einer Gruppe den Datensatz extrahieren, der tatsächlich den größten Wert bezüglich eines Kriteriums hat und das über mehrere Jahre in EINER Abfrage.

  • #2
    Deine Abfrage st inhaltlich / syntaktisch falsch, leider merkt MySQL das nicht und liefert ein zufälliges, falsches Ergebniss - wie bemerkt hast. Andere Systeme würde die Abfrage gar nicht erst ausführen.

    Ermittle Jahr und max(km) und joine die Tabelle dageben, um den Rest zu ermitteln. Oder verwende DISTINCT ON (...), was MySQL aber nicht kann. Oder Window-Funktionen row_number(), was aber Deine MySQL vermutlich auch nicht kann. Oder wirf MySQL dahin, wo es hingehört, also in die Tonne, und nehme gleich was richtiges.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      ok, danke. Folgendes Statement funktioniert

      SELECT
      t1.kennzeichen, t1.baujahr, t1.kilometer
      FROM autos t1
      RIGHT JOIN
      ( SELECT
      baujahr, MAX(kilometer) m
      FROM autos
      WHERE baujahr BETWEEN 2000 AND 2005
      GROUP BY baujahr) t2
      ON t1.baujahr = t2.baujahr AND t1.kilometer = t2.m

      In der inneren Tabelle suche ich mir den Maximalwert für jedes Jahr heraus und joine dieses dann mit der Originaltabelle, um jeweils den ensprechenden Datensatz auszulesen.

      Kommentar

      Lädt...
      X