Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Neueste Einträge einer SQL Tabelle

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von mixmaxi, 24 März 2015.

  1. mixmaxi

    mixmaxi Neuer Benutzer

    Hallo ich sitze jetzt schon länger an dieser Abfrage und komm nicht weiter. Ich habe drei Tabellen. In einer senden verschiedene Testsender alle 5 Minuten ihre Temperatur. Manchmal sendet er sie aber auch nicht mit. Ich möchte immer den neuesten Eintrag von jedem einzelnen Testsender. In einer weiteren Tabelle stehen die Ortskoordinaten zu den jeweiligen Testsendern. In der dritten Tabelle steht ein Farbcode zu jeder Temperatur. Mein Code sah bis jetzt so aus und er hat auch mal funktioniert aber jetzt bekomm ich nur den allerneuesten Eintrag. cube_temp ist die Tablle, wo die Sendedaten der Testsender hinterlegt sind und sensor_cube_table die Ortskoordinaten.

    SELECT *
    FROM cube_temp
    LEFT JOIN sensor_cube_table
    ON cube_temp.TransmitterId = sensor_cube_table.CubeId
    LEFT JOIN Color
    ON cube_temp.Temperature = Color.Temperature
    WHERE cube_temp.Temperature IS NOT NULL
    AND cube_temp.DateTime = (SELECT max(cube_temp.DateTime)
    FROM cube_temp, sensor_cube_table
    WHERE cube_temp.TransmitterId = sensor_cube_table.CubeId
    AND cube_temp.Temperature IS NOT NULL)

    Danke schon einmal für eure Hilfe
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Aggregiern und gruppieren. Ich errate jetzt nicht aus dem Select Deine Tabellen.
     
  3. mixmaxi

    mixmaxi Neuer Benutzer

    Oke beschränken wir uns nur auf eine Tablle, die cube_temp. Die Anderen sind egal erst einmal. Die Group By Funktion gibt immer die falschen Datensätzen aus. Zwar kann ich durch max(DateTime) den aktuellsten Sendezeitpunkt von jedem testsender ermitteln aber die dazugehörigen Spalten erhalte ich nicht, sondern x-beliebige:

    SELECT *, max(cube_temp.DateTime)
    FROM cube_temp
    Inner JOIN sensor_cube_table
    ON cube_temp.TransmitterId = sensor_cube_table.CubeId
    Group By cube_temp.TransmitterId
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ja. Ist ein Bug von MySQL. Es akzeptiert, daß in Aggregationen nicht alle Spalten im Resultat entweder aggregiert oder gruppiert sein müssen. Warte bitte auf die nächste große Version von MySQL, die wird Dir bei diesem Select einen Syntaxfehler liefern. Wowereit.
     
  5. mixmaxi

    mixmaxi Neuer Benutzer

    Gibt es keinen anderen Lösungsvorschlag?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ja, sicher, viele. Siehe #2.

    Code:
    test=# create table messung(sensor int, ts timestamp, wert int);
    CREATE TABLE
    test=*# select sensor, max(ts) from messung group by sensor;
     sensor | max
    --------+-----
    (0 rows)
    
    test=*# select * from messung where (sensor,ts) in (select sensor, max(ts) from messung group by sensor);
     sensor | ts | wert
    --------+----+------
    (0 rows)
    
    
    Das wäre einer.
     
  7. mixmaxi

    mixmaxi Neuer Benutzer

    Oke Danke ich habs geschafft, hoff ich.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden