MySQL: Messwerte, welche stagnieren interpolieren?

#1

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:15: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:115:20

x = interpolierter Datums-/Zeitstempel, interpolierter Messwert.

Besten Dank für eure Tipps. :slight_smile:

#2

So vielleicht?

select messwert, min(timestamp) from xxx where device = 8 group by messwert order by timestamp desc.

Achso :wink: Nachdem ich nachgedacht habe, warum die triviale Antwort hier nicht selbst gefunden wurde, habe ich die tatsächliche Aufgabe gesehen.

Nein, man kann das in SQL nicht interpolieren. In TSQL gäbe es die möglichkeit einer rekuriven SQL aber ich denke nicht, dass das valide ist.

Die Interpolation muss die Anwendung machen.

#3

Vielen Dank fürs schnelle Feedback, dann werd ich es eben unter PHP lösen. :wink:

P.S.: “id,device_id,messwert,timestamp” -> das ist falsch in den letzten 2 Auflistungen, das Feld “id” gehört dort nicht hin.

#4

falls Du mit WinCC arbeitest (Conectivity-Pack) - da gibt es entsprechende Querys die Dir die Arbeit abnehmen

#5

Meinst Du das hier: https://w3.siemens.com/mcms/human-machine-interface/de/visualisierungssoftware/scada-wincc/Seiten/Default.aspx

Falls ja, dann lautet die Antwort “nein”.

Wir verwenden LAMP…