Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zeitdifferenz zwischen 2 Einträgen ermitteln

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von MHO_WI, 27 Juni 2017.

  1. MHO_WI

    MHO_WI Neuer Benutzer

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

    akretschmer Datenbank-Guru

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

    MHO_WI Neuer Benutzer

    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:
    [​IMG] DatumUhrzeit Geschwindigkeit
    [​IMG] [​IMG] 2017-06-26 07:09:17 14
    [​IMG] [​IMG] 2017-06-26 14:02:46 14
    [​IMG] [​IMG] 2017-06-26 14:04:16 14
    [​IMG] [​IMG] 2017-06-26 14:05:43 14
    [​IMG] [​IMG] 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.
     
  4. akretschmer

    akretschmer Datenbank-Guru

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

    MHO_WI Neuer Benutzer

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

    ukulele Datenbank-Guru

    Man könnte auch mit ROW_NUMBER() nach Zeilennummer versetzt joinen, leider ist auch das nicht MySQL-Standard.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    jepp, row_number() ist ebenfalls eine Window-Funktion und als solche nicht in MySQL verfügbar.
     
  8. BerndB

    BerndB Datenbank-Guru

    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 ?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden