Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL mit DISTINCT(), MAX()

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySQL mit DISTINCT(), MAX()

    Hi!

    Ich möchte aus einer MySQL-DB folgendes Ergebnis haben:

    Gib mir alle verschiedenen Arten, Namen zu einer bestimmten Nummer, aber jeweils nur die neuesten.

    DB:
    nummer | art | name | datum
    1 | a | egon | 1.1.2012
    1 | a | paul | 5.1.2012
    1 | b | susi | 17.3.2012
    1 | b | emma | 21.1.2012

    Gewünschte Ausgabe:
    a | paul
    b | susi

    Ich komme mit MAX() und DISTINCT() hier nicht zurecht, meine Abfrage sieht zur Zeit so aus:

    Code:
    SELECT DISTINCT(art), name, MAX(datum) FROM tabelle WHERE nummer=1
    Das bringt (natürlich) nur den neuesten Eintrag zur Nummer (ist nicht die ID).

    Wie mache ich es richtig?

    Danke, Lars

  • #2
    1. fehlt die Gruppierung und
    2. fehlt der Faktor b in dieser Gruppierung

    Kommentar


    • #3
      Hallo,

      das mit dem fehlenden Grundlagenwissen sollte ich mir wohl zu Herzen nehmen ^^.

      Hab die Lösung danke deines "Stupsers" zusammenbekommen:

      Code:
      SELECT art, name, MAX(datum) FROM tabelle WHERE nummer=1
      GROUP BY art
      Vielen Dank!

      Lars

      Kommentar


      • #4
        Ob in "name" dann auch der passende Name zum neuesten Datum steht überlässt du mit dieser "Lösung" allerdings dem Zufall...

        Hier ist eine Anleitung, wie es richtig gemacht wird.

        Kommentar


        • #5
          Hallo fab!

          Bin nochmal in meinen "Erledigt"-geglaubten Thread gekommen und sehe deine Antwort. Mittlerweile bin ich auch selbst auf den Fehler gestoßen und habe mich schon eine Weile über die seltsamen Ergebnisse (und nicht zusammengehörenden Zeilen) gewundert. Dein Link hat mich zur korrekten Lösung geführt.

          Hier nun meine aktuelle Abfrage:

          Code:
          SELECT
            t1.name,
            t1.art,
            t1.datum
          FROM
            tabelle t1
          WHERE
            t1.nummer=1
            AND
            t1.datum=
              (
              SELECT
                MAX(t2.datum)
              FROM
                tabelle t2
              WHERE
                t1.id=t2.id)
          GROUP BY t1.art
          Und nun kommen auch die aktuellsten Namen.

          Danke dir!

          Lars

          Kommentar

          Lädt...
          X