Announcement

Collapse
No announcement yet.

bedingter Select (vorherige Zeile)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • bedingter Select (vorherige Zeile)

    Hallo,
    ich habe eine riesige Tabelle in meiner Datenbank, über eine Million Datensätze. Allerdings sind für meine Berechnungen immer nur die Zeilen interessant bei der sich zu der vorherigen (ins Muster des SELECT passenden Zeile) etwas geändert hat zum Beispiel:
    Code:
    ID     WERT     TIMESTAMP
     1      5       irgendein unix timestamp
     2      4       irgendein unix timestamp
     3      4       irgendein unix timestamp
     4      4       irgendein unix timestamp
     5      5       irgendein unix timestamp
     6      8       irgendein unix timestamp
     7      8       irgendein unix timestamp
     8      5       irgendein unix timestamp
    Wenn ich jetzt meine Abfrage starte hätte ich als Resultset gerne folgendes:
    Code:
    ID     WERT     TIMESTAMP
     1      5       irgendein unix timestamp
     2      4       irgendein unix timestamp
     5      5       irgendein unix timestamp
     6      8       irgendein unix timestamp
     8      5       irgendein unix timestamp
    Wie man sieht sind nur die Datensätze relavant bei denen sich zum unmittelbaren Vorgänger etwas geändert hat, das heißt ich will ja genau wissen wie lange "Wert" gleichgeblieben ist.

    Allerdings weiß ich nicht wie eine Abfrage da aussehen sollte. Geht soetwas überhaupt? Und wenn ja wie?

    Mit freundlichen Grüßen

    Daniel


    keine Ideen?
    Zuletzt editiert von das-d; 12.10.2011, 23:02.
    Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

  • #2
    Sowas ist zwar nicht der Sinn von mySQL - lässt sich aber mit einem Join auf sich selbst lösen.

    Also sowas:
    Code:
    SELECT a.ID, a.WERT, a.TIMESTAMP
    FROM <CHANGEME> AS a
    LEFT OUTER JOIN <CHANGEME> AS b 
      ON a.ID-1 = b.ID
    WHERE 
      (a.WERT <> b.WERT) OR
      (b.WERT IS NULL)
    In diesem Beispiel wird allerdings angenommen, dass die ID's ausnahmslos fortlaufend sind.

    Wirklich performant ist das allerdings nicht. Rein konzeptionell wäre es auf jeden Fall vernünftiger wenn die Applikation nur neue Daten abfüllt wenn es auch effektiv eine Änderung gab.

    Comment


    • #3
      leider können wir das nicht begrenzen. Die Sache ist dass sich andere Parameter, welche auch wichtig sind, sehr wohl von Datensatz zu Datensatz ändern. Auch wenn es nur die Zeit ist.

      Dadurch sind wir gezwungen die Berechnungen die auf weniger oft veränderlichen Feldern beruhen zu ändern. Allerdings muss das mit einer gewissen Performance verbunden sein, eine Möglichkeit wäre eben nur Datensätze auszulesen bei denen sich das geändert hat.

      Ich werde das warscheinlich über Daten in vorberechneten neuen Tabellen machen. Da es auch später noch performant bleiben soll.

      Trotzdem danke

      Gruß Daniel
      Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

      Comment

      Working...
      X