Zeitdifferenz zwischen 2 Einträgen ermitteln

MHO_WI

Neuer Benutzer
Beiträge
3
Hi,
bin neu hier im Forum.
Ich hab mit MySQL noch nicht allzuviel gemacht, außer das ich über c# einige wenige Datenbanken abfrage.
Nun habe ich aber ein Problem, welches ich so nicht gelöst bekomme.
Erstmal zum Hintergrund:
Wir haben hier eine Tabelle, in die unsere Produktionsanlage kontinuirlich Einträge schreibt.
Nun kann es passieren, das die Maschine kurzzeitig steht und der nächste Eintrag länger dauert.
Jetzt möchte ich quasi direkt in der Abfrage diese Stillstände raus filtern.
Also ich möchte quasi nur die Einträge sehen, die nicht länger als 5 Minuten auseinander liegen.
Mein SQL Code sieht momentan so aus:
SELECT DatumUhrzeit AS TimeStamp, CAST(Geschwindigkeit AS Decimal(4,0))/10 AS Speed From 01_Laminierpresse WHERE DatumUhrzeit BETWEEN ? AND ?
Die Fragezeichen sind Platzhalter in meinem c# Code, die dann gefüllt werden.
Wie kann ich die Abfrage nun so umbauen, das mir nur die Einträge gezeigt werden, die nicht mehr als 5 Minuten auseinander liegen?
Hatte es mit WHERE DatumUhrzeit BETWEEN ? AND ? AND Date_Sub(DatumUhrzeit, Interval 5 Minute) probiert, aber da bekam ich garkeine Einträge mehr.

Hat jemand nen Tip?

Vielen Dank
Micha
 
Werbung:
soll die Differenz zwischen verschiedenen Records sein? Dann wäre das ein klarer Fall für Window-Funktionen. Du brauchst als entweder ein sehr aktuelles MariaDB oder besser noch PostgreSQL.
 
Hi,
Äh.. versteh grad nicht was Du meinst.
Also, in der Tabelle gibt es sagen wir mal 100 Einträge für einen Tag.
Nun möchte ich aber mit einer Abfrage nur die Einträge haben, die nicht länger als 5 Minuten auseinander liegen.

Beispieldaten von gestern:
DatumUhrzeit Geschwindigkeit
2017-06-26 07:09:17 14
2017-06-26 14:02:46 14
2017-06-26 14:04:16 14
2017-06-26 14:05:43 14
2017-06-26 14:07:12 14

hier sieht man, das zwischen dem ersten Eintrag und dem 2. Eintrag fast 7 Stunden vergangen sind, das war ein Stillstand.
Diese Einträge gibt es öfter, allerdinsg ist 7 Stunden ne Ausnahme, daher möchte ich alle rausfiltern, wo die Einträge nicht länger als 5 Minuten auseinander liegen.
In obigem Beispiel also Eintrag 1.
Die Abfrage verwende ich dann in meinem C# Programm.
 
Ja, um die Differenz zwischen dem aktuellen und dem Vorgängerdatensatz (z.B. sortiert nach dem Timestamp) zu ermitteln gibt es Window-Funktionen. Allerdings nicht in MySQL. lag() wäre hier Dein Freund.
 
OK, schaue ich mir an. Zur Not lade ich die Daten alle in eine Temp Tabelle in C# und filtere sie dort raus...
Danke Dir
 
Man könnte auch mit ROW_NUMBER() nach Zeilennummer versetzt joinen, leider ist auch das nicht MySQL-Standard.
 
Werbung:
Was soll das Ergebnis sein wenn du z.B.
von 8 bis 10 Uhr alle 5 Minuten einen Eintrag hast,
dann um 11 Uhr einen
und dann von 12-14 Uhr wieder alle 5 Minuten ?

Soll dann nur die 11:00 Uhr Zeile fehlen ?
 
Zurück
Oben