Hallo zusammen
Gegeben ist eine Tabelle mit versch. Messwerten (auch aus versch. Sensoren, über den FK "device_id" bestimmt)
Nun ist es so, dass der Hintergrunddienst die Messwerte nur schreibt, wenn sie sich verändert haben. Bis zum nächsten Datensatz (unter device_id x) können unter Umständen Sekunden, Minuten, Stunden oder Tage liegen.
Jeder Datensatz hat natürlich auch einen PK.
Frage: Wie kann ich mit einer SELECT-Abfrage stagnierende Messwerte interpolieren? Die Felder, welche in der Abfrage zusätzlich hinzugefügt werden sollen, sind das datetime-Feld sowie der Messwert.
Also:
Daten in der Tabelle:
id, device_id, messwert, timestamp
1,8,2,2019-05-06 10:15:03
2,8,6,2019-05-06 10:15:05
3,8,8,2019-05-06 10:15:08
4,8,4,2019-05-06 10:15:10
5,8,3,2019-05-06 10:15:14
6,8,6,2019-05-06 10:15:17
7,8,1,2019-05-06 10:115:19
Daten bei der Abfrage, ohne Interpolation, (ohne PK, "WHERE device_id = 8", "ORDER BY `timestamp` ASC"):
id, device_id, messwert, timestamp
8,2,2019-05-06 10:15:03
8,6,2019-05-06 10:15:05
8,8,2019-05-06 10:15:08
8,4,2019-05-06 10:15:10
8,3,2019-05-06 10:15:14
8,6,2019-05-06 10:15:17
8,1,2019-05-06 10:115:19
Daten bei der Abfrage mit Interpolation, (ohne PK, "WHERE device_id = 8", "ORDER BY `timestamp` ASC"):
id,device_id,messwert,timestamp
8,2,2019-05-06 10:15:03
8,2,2019-05-06 10:15:04 x
8,6,2019-05-06 10:15:05
8,6,2019-05-06 10:15:06 x
8,6,2019-05-06 10:15:07 x
8,8,2019-05-06 10:15:08
8,8,2019-05-06 10:15:09 x
8,4,2019-05-06 10:15:10
8,4,2019-05-06 10:15:11 x
8,4,2019-05-06 10:15:12 x
8,4,2019-05-06 10:15:13 x
8,3,2019-05-06 10:15:14
8,3,2019-05-06 10:15:15 x
8,3,2019-05-06 10:15:16 x
8,6,2019-05-06 10:15:17
8,6,2019-05-06 10:15:18 x
8,6,2019-05-06 10:15:19 x
8,1,2019-05-06 10:15:20
x = interpolierter Datums-/Zeitstempel, rot = interpolierter Messwert.
Besten Dank für eure Tipps.
Gegeben ist eine Tabelle mit versch. Messwerten (auch aus versch. Sensoren, über den FK "device_id" bestimmt)
Nun ist es so, dass der Hintergrunddienst die Messwerte nur schreibt, wenn sie sich verändert haben. Bis zum nächsten Datensatz (unter device_id x) können unter Umständen Sekunden, Minuten, Stunden oder Tage liegen.
Jeder Datensatz hat natürlich auch einen PK.
Frage: Wie kann ich mit einer SELECT-Abfrage stagnierende Messwerte interpolieren? Die Felder, welche in der Abfrage zusätzlich hinzugefügt werden sollen, sind das datetime-Feld sowie der Messwert.
Also:
Daten in der Tabelle:
id, device_id, messwert, timestamp
1,8,2,2019-05-06 10:15:03
2,8,6,2019-05-06 10:15:05
3,8,8,2019-05-06 10:15:08
4,8,4,2019-05-06 10:15:10
5,8,3,2019-05-06 10:15:14
6,8,6,2019-05-06 10:15:17
7,8,1,2019-05-06 10:115:19
Daten bei der Abfrage, ohne Interpolation, (ohne PK, "WHERE device_id = 8", "ORDER BY `timestamp` ASC"):
id, device_id, messwert, timestamp
8,2,2019-05-06 10:15:03
8,6,2019-05-06 10:15:05
8,8,2019-05-06 10:15:08
8,4,2019-05-06 10:15:10
8,3,2019-05-06 10:15:14
8,6,2019-05-06 10:15:17
8,1,2019-05-06 10:115:19
Daten bei der Abfrage mit Interpolation, (ohne PK, "WHERE device_id = 8", "ORDER BY `timestamp` ASC"):
id,device_id,messwert,timestamp
8,2,2019-05-06 10:15:03
8,2,2019-05-06 10:15:04 x
8,6,2019-05-06 10:15:05
8,6,2019-05-06 10:15:06 x
8,6,2019-05-06 10:15:07 x
8,8,2019-05-06 10:15:08
8,8,2019-05-06 10:15:09 x
8,4,2019-05-06 10:15:10
8,4,2019-05-06 10:15:11 x
8,4,2019-05-06 10:15:12 x
8,4,2019-05-06 10:15:13 x
8,3,2019-05-06 10:15:14
8,3,2019-05-06 10:15:15 x
8,3,2019-05-06 10:15:16 x
8,6,2019-05-06 10:15:17
8,6,2019-05-06 10:15:18 x
8,6,2019-05-06 10:15:19 x
8,1,2019-05-06 10:15:20
x = interpolierter Datums-/Zeitstempel, rot = interpolierter Messwert.
Besten Dank für eure Tipps.
Zuletzt bearbeitet: