Michi: letzten 10 Datensätze, doch keine doppelten

ich schon wieder 😱

ich möchte die letzten 10 Datensätze ausgeben:

SELECT datum, name FROM stat ORDER by datum ASC Limit 10

aber es kann sein, das mehrere Datensätze mit gleichem 'name' in der Tabelle stehen. So möchte ich nur einen, den aktuellste Datensatz anzeigen.

Zuerst habe ich es mit group ausprobiert, doch da wird irgendwie sortiert und irgendein Datensatz ausgegeben. Kann ich group auch so sortieren das der erste Datensatz ausgegeben wird.

Michi

  1. Hi,

    ich möchte die letzten 10 Datensätze ausgeben:

    SELECT datum, name FROM stat ORDER by datum ASC Limit 10

    aber es kann sein, das mehrere Datensätze mit gleichem 'name' in der Tabelle stehen. So möchte ich nur einen, den aktuellste Datensatz anzeigen.

    nach Name gruppieren, und statt des datum das Maximum der Datümmer ausgeben.

    also so:

    SELECT max(datum), name FROM stat ORDER BY datum ASC GROUP BY name LIMIT 10;
    

    cu,
    Andreas a/k/a MudGuard

    1. Hi,

      ich möchte die letzten 10 Datensätze ausgeben:

      SELECT datum, name FROM stat ORDER by datum ASC Limit 10

      Hm. Für "die letzten" müßte es doch eher ORDER BY datum DESC LIMIT 10; heißen.

      cu,
      Andreas a/k/a MudGuard

      1. SELECT max(datum), name FROM stat GROUP BY name ORDER BY datum DESC LIMIT 10

        Schaut nicht schlecht aus, aber stimmt leider auch nicht bei der Ausgabe.

        es werden zwar die richtige Datensätze ausgewählt nur die Sortierung haut nicht hin

        Michael-2021-05-26 20:52:53
        Maria-2021-05-26 20:18:15
        Hui Buh-2021-05-26 11:08:10
        Bernd das Brot-2021-05-26 21:01:59
        

        Bernd das Brot, sollte an erster Stelle sein, nicht an letzter

        1. Bernd das Brot, sollte an erster Stelle sein, nicht an letzter

          Tja. Wie wärs denn damit, dieses der Datenbank statt uns zu „sagen“?

          SELECT
              max(datum),
              name
          FROM stat
          GROUP BY name
          ORDER BY
              name,
              datum DESC
          LIMIT 10
          
          1. Bernd das Brot, sollte an erster Stelle sein, nicht an letzter

            Tja. Wie wärs denn damit, dieses der Datenbank statt uns zu „sagen“?

            SELECT
                max(datum),
                name
            FROM stat
            GROUP BY name
            ORDER BY
                name,
                datum DESC
            LIMIT 10
            

            Das führt, wie ich gerade sehe, dann aber zu einem Problem: Das Limit begrenzt dann auf die 10 ersten Namen.

            Möglichweise hilft ein Subselect:

            SELECT 
                datum, name
            (
                SELECT
                    MAX(datum) AS datum,
                    name
                FROM stat
                GROUP BY name
                ORDER BY
                    datum DESC
                LIMIT 10
            )
            ORDER BY name;
            
          2. So Michi,

            Da Dein Problem weniger eindeutig beschrieben ist als Du vielleicht annimmst könnte auch ein stumpfes

            SELECT
                max(datum),
                name
            FROM stat
            GROUP BY name
            ORDER BY
                datum DESC
                name,
            LIMIT 10
            

            dieses lösen.

            Im ersten Satz steht: Jetzt bist Du dran.

  2. Hallo Michi,

    bei alledem ist eine Frage zu klären: selektierst Du NUR Name und Datum? Oder sind da noch mehr Spalten?

    Weitere Frage wäre: Ist der Name in der Table eindeutig? Namen sind nämlich typischerweise mehrdeutig. Das mag bei Dir anders sein, aber das muss man dann sagen. Wenn deine Table mehr als einen - sagenwirmal - Michi enthalten kann, wäre die weitere Frage, wie Du mehrere Michis auseinanderhältst.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf,

      Nein es gibt definitiv nur einen Michi, sowie einen Rolf 😜.

      und ich hole mir noch ein zwei Felder aus der Spalte.

      Michi

      1. Hallo Michi,

        und gehen diese weiteren Felder in die Eindeutigkeitsprüfung ein? Oder kann es sein, dass Michi am 01.05.2021 im Feld ˋhuiˋ den Wert "Buh" stehen hat und am 10.05. den Wert "Muh", und du möchtest den Eintrag für Michi am 10.05. haben?

        In dem Fall kommst Du mit Subselects und Group By, wie bisher diskutiert, nicht weiter. Es ist lösbar, aber bevor ich mir dazu die Finger abtippe (abgesehen davon dass ich das hier im Forum schon mehrfach beschrieben habe), hätt ich gern deine Bestätigung

        Update: Ich glaube, hier steht so was ähnliches.

        Rolf

        --
        sumpsi - posui - obstruxi