Wert von vorheriger Zeile auslesen

Hallo,

habe eine Datenbank mit den Spalten id, zeit(DATETIME), x und y. Ich gebe die Daten per while aus.

Jetzt möchte ich ab der id 2 das ich die Differenz zwischen der Zeit von id 1 und 2, 2 und 3 usw… zur Weiterberechnung nutzen. Ist es möglich dies so abzufragen, oder muss ich beim eintragen den vorherigen wert auslesen und mit in den aktuellen speichern?

Gruß Alex

Binde die Tabelle doppelt ein. Beispiel:

SELECT t1.*, DATEDIFF(t1.zeit, t2.zeit) zeitdifferenz FROM tabelle t1 JOIN tabelle t2 ON t2.id = t1.id + 1

Allerdings solltest Du ein besseres Kritierum definieren für „vorherigen Wert“. Das mit der ID zu ermitteln ist keine gute Idee, weshalb mein Tipp hier nur als Ansatz gedacht sein sollte.

Hallo,

hier mal ein Beispiel:

id zeit x y 4 2016-12-03 12:30:00 12 100 3 2016-11-29 17:50:00 18 90 2 2016-11-27 05:40:00 9 45 1 2016-11-25 20:00:00 17 100

Jetzt benötige ich zur Berechnung der Differenz die Zeit von id1 und id 2 damit ich mit x und y weiter rechnen kann.

Ps.: Also doch jetzt lieber eine weitere spalte und dann dort das datum von der letzten id auslesen und mit den anderen aktuellen werten speichern?

Gruß Alex

Wie gesagt: es kommt auf der Kriterium an mit denen Du „vorherigen Datensatz“ definierst. Ich kann das weiterhin bei dir nicht erkennen.

Ich habe es jetzt erst einmal etwas komplizierter gelöst, da die Daten nur zur kurzen Info dienen …

Alex

Habe das Thema bisschen verfolgt, weil ich mal was ähnliches geschrieben habe. Und mein Code sah im Prinzip ähnlich aus wie deiner. Okay, er hat noch überprüft ob es die Zeile mit der niedrigeren ID überhaupt gibt und ist rückwirkend alle IDs bis zur 1 zurückgegangen, aber an sich bin ich ziemlich gut mit der ID gefahren. Könntest du kurz erklären, welches Problem du in der Benutzung der ID siehst?

Vielen Dank…

((Ich mag es nicht, wenn so Themen in der Mitte plötzlich aufhören. Dafür bin ich zu sehr Bastler und Puzzler, um das ganze dann ohne Ergebnis zu sehen…))

Bei einer auto_increment-Spalte weist Du nie ob eine ID auch in Realzeit nach einer anderen ID erstellt wurde. Wenn quasi 2 Requests kurz hintereinander jeweils einen Datensatz erzeugen, kommt es drauf an welcher Request zuerst in der Datenbank angekommen war. Bei großen Anwendungen oder häufig frequentierten Tabellen kann das durchaus öfter mal passieren.
Zudem könnte, durch Manipulation des auto_increment-Wertes der Spalte eine ehemals gelöscht ID auch nochmal vergeben werden. Wenn derjenige, der so etwas ändert von der Programmierung der Anwendung nichts weis, kann es nach hinten losgehen.

Ich würde das wie gesagt eher inhaltlich lösen :slight_smile: