CRA: MySQL-Tabelle sortiert und Gruppiert ausgeben

Hallo zusammen ...

Es handelt sich um MySQL Version 5.0.

Ich habe eine Tabelle mit mehreren Datensätzen. Es existieren die folgenden Spalten: name(Varchar(255)), ts_create (int(6)) und ein paar weitere.

Es können mehrere Datensätze mit demselben Namen vorkommen, jedoch immer mit unterschiedlichem ts_create-Wert.

Nun möchte ich diese Datensätze so ausgeben, dass von einer Reihe Datensätzen mit gleichem Namen immer nur 1er angezeigt wird und zwar der mit der grössten ts_create. Klar könnte ich dies mit mehreren Abfragen machen, irgend wie muss das doch aber auch mit GROUP BY und ORDER BY gehen.

Danke schon jetzt
Gruss CRA

  1. Hi,

    SELECT DISTINCT name, (SELECT Max(ts_create) FROM tabelle WHERE name = t.Name)
       FROM tabelle t

    Oder so ähnlich ;)

    Lies dich doch bitte mal zum Thema "korrelierende Unterabfragen" ein, da solltest du allein hier im Forumsarchiv schon Tonnen von Beiträgen finden.

    Wie steht's mit deinen Versuchen?

    Ciao, Frank

    1. yo,

      SELECT DISTINCT name, (SELECT Max(ts_create) FROM tabelle WHERE name = t.Name)
         FROM tabelle t

      Lies dich doch bitte mal zum Thema "korrelierende Unterabfragen" ein, da solltest du allein hier im Forumsarchiv schon Tonnen von Beiträgen finden.

      die korrelation muss in die selektion (Where klausel) und nicht in die projektion.

      Ilja

      1. Moin,

        die korrelation muss in die selektion (Where klausel) und nicht in die projektion.

        MUSS? Weil es mysql ist?

        Frank

        1. yo,

          MUSS? Weil es mysql ist?

          nein, weil er nur bestimmte datensätze haben will und nicht alle.

          Ilja

          1. MUSS? Weil es mysql ist?
            nein, weil er nur bestimmte datensätze haben will und nicht alle.

            Dazu war eigentlich das distinct am Anfang gedacht :)

            Er möchte jeden einzelnen Namen einmal (distinct) und dazu dessen MAX(ts_create). Man kann es sehrwohl auch mit einem SELECT Feld, (SELECT aggregatedValue FROM correlatedQuery) FROM tabelle machen ... nur ob es so am effizientesten ist, das steht in einem anderen Buch. Von MUSS muss aber nicht immer gleich die Rede sein. Viele Wege führen bekanntlich nach Rom. :)

            Ciao, Frank

            1. yo,

              Dazu war eigentlich das distinct am Anfang gedacht :)

              stimmt, das habe ich mal übersehen, es würde auch damit gehen.

              nur ob es so am effizientesten ist, das steht in einem anderen Buch. Von MUSS muss aber nicht immer gleich die Rede sein.

              muss man immer testen, bevor man das sagen kann, aber ich vermute mal nicht so effektiv.

              Ilja

  2. Hello,

    Es können mehrere Datensätze mit demselben Namen vorkommen, jedoch immer mit unterschiedlichem ts_create-Wert.

    seh ich nen Wald vor lauter Bäumen nicht? Das ist doch das Paradebeispiel für ein GROUP BY, einmal gruppieren und auf die zweite Spalte eine Aggregation.
    SELECT name, MAX(ts_create) AS maxcreate
    FROM table
    GROUP BY name

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
    1. moin rouven,

      seh ich nen Wald vor lauter Bäumen nicht? Das ist doch das Paradebeispiel für ein GROUP BY, einmal gruppieren und auf die zweite Spalte eine Aggregation.

      das kommt draufd an, wie man diesen satz interpretiert:

      "Nun möchte ich diese Datensätze so ausgeben, dass von einer Reihe Datensätzen mit gleichem Namen immer nur 1er angezeigt wird und zwar der mit der grössten ts_create."

      ich gehe davon aus, dass er mehr als nur den namen und dem max ts_create angezeigt haben will und dann wird es schwierig mit der gruppierung.

      Ilja