# MySQL: Messwerte, welche stagnieren interpolieren?



## ruutaiokwu (6. Mai 2019)

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, interpolierter Messwert.

Besten Dank für eure Tipps.


----------



## Barista (7. Mai 2019)

jmar83 hat gesagt.:


> 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.



Nach meiner schwachen Kenntnis ist dies mit Window-Funktionen möglich.

Lukas Eder hatte dazu einige Sachen geblogt (Suchmaschine).


----------



## ruutaiokwu (7. Mai 2019)

Vielen Dank, werde mal danach schauen!


----------

