Margin-Auto: GROUP BY und jeweils neuester Datensatz

Hi,

ich habe in einer Tabelle Informationen abgelegt zu (bspw.) Personen. Zu jeder Person können mehrere Datensätze existieren und jeder Datensatz hat einen Timestamp. Der Primary-Key besteht dann aus der Personen-ID und dem Timestamp.
Ich möchte nun eine Liste mit dem jeweils aktuellsten Datensatz zu jeder Person erhalten. Wenn ich einfach ein GROUP BY nach der Personen-ID mache, bekomme ich immer den ältesten Datensatz. Auch ein ORDER BY DESC nach dem Timestamp hat nix gebracht.
Im Archiv habe ich das hier gefunden, bin mir aber nicht ganz sicher, ob es das gleiche Problem ist :-/

Any ideas?

TIA

Margin-Auto

  1. yo,

    ich gehe mal stillschweigend davon aus, dass du mysql benutzt. interessant wäre noch zu wissen, welche version du verwendest.

    SELECT personen_id, MAX(spalte_timestamp)
    FROM tabelle
    GROUP BY personen_id

    die abfrage gibt dir von jeder personen_id das neuste datum wieder. willst du mehr informationen in der SELECT anweisung mit ausgeben, dann musst du diese abfrage nehmen und als unterabfrage entsprechend aufbauen. aber erst einmal sollte man klären, ob dein dbms unterabfragen überhaupt kann.

    Ilja

    1. Hi,

      ich gehe mal stillschweigend davon aus, dass du mysql benutzt. interessant wäre noch zu wissen, welche version du verwendest.

      SELECT personen_id, MAX(spalte_timestamp)
      FROM tabelle
      GROUP BY personen_id

      die abfrage gibt dir von jeder personen_id das neuste datum wieder. willst du mehr informationen in der SELECT anweisung mit ausgeben, dann musst du diese abfrage nehmen und als unterabfrage entsprechend aufbauen. aber erst einmal sollte man klären, ob dein dbms unterabfragen überhaupt kann.

      Ja, ich verwende natürlich mysql. Sorry, hatte ich vergessen zu erwähnen.
      Wie käme ich denn jetzt an die eigentlichen Infos in den Datensätzen ran? Das Datum allein hilft mir leider nicht weiter.

      Dennoch danke an beide für die Antworten

      Margin-Auto

      1. yo,

        Wie käme ich denn jetzt an die eigentlichen Infos in den Datensätzen ran? Das Datum allein hilft mir leider nicht weiter.

        welche mysql version benutzt du denn, bzw. verwendest du mysql ab 4.1, welche unterabfragen kann ?

        Ilja

        1. Hi,

          welche mysql version benutzt du denn, bzw. verwendest du mysql ab 4.1, welche unterabfragen kann ?

          Laut Auskunft meines Hosters 5.0.

          Margin-Auto

          1. yo,

            Laut Auskunft meines Hosters 5.0.

            ok damit sind unterabfragen möglich. du hast im prinzip das gleiche problem wie der herr tannenbaum https://forum.selfhtml.org/?t=119721&m=768236, sprich auch hier sollte eine korrelierende unterabfrage zum einsatz kommen. es ist immer besser, auch die spalten und tabellen namen mit anzugeben, dann kann man diese auch benutzen.

            SELECT t1.personen_id, t1.spalte_timestamp, t1.spalte3, etc.
            FROM tabelle AS t1
            WHERE t1.spalte_timestamp =
             (
             SELECT MAX(t2.spalte_timestamp) FROM tabelle AS t2 WHERE t2.personen_id = t1.personen.id
             )

            Ilja

            1. Hi,

              SELECT t1.personen_id, t1.spalte_timestamp, t1.spalte3, etc.
              FROM tabelle AS t1
              WHERE t1.spalte_timestamp =
              (
              SELECT MAX(t2.spalte_timestamp) FROM tabelle AS t2 WHERE t2.personen_id = t1.personen.id
              )

              Danke für die Hilfe.

              Margin-Auto

  2. Moin,

    SELECT ID, MAX(Timestamp)
    FROM   Tabelle
    GROUP BY ID

    könnte evtl. gehen.

    Gruss Rainer