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

negative Flanken erkennen, zählen und berechnen

Dieses Thema im Forum "Microsoft Access" wurde erstellt von Manni, 5 Mai 2017.

  1. Manni

    Manni Neuer Benutzer

    Hallo zusammen.
    Habe folgendes Problem:
    Ich habe von einer laufenden Anlage einen ganzen Tag lang Daten mitgeschrieben und in eine Datenbank importiert. Die Anlage läuft den ganzen Tag über mehrfach an und bleibt stehen (Wechsel von 1-Signal auf 0-Signal). Außerdem zeichnen wir die Geschwindigkeit auf.
    Nun wollen wir eine Aufzeichnung darüber haben, wie lange das Gerät zum tatsächlichen stehenbleiben benötigt (Bremszeit bzw. Nachlaufzeit, also die Zeit die das Gerät benötigt wenn das Gerät 0-Signal[negative Flanke] bekommt, bis die tatsächliche Geschwindigkeit auch gleich null ist).
    Im Anhang ist die Tabelle, ich will nun die Zeit des blau markierten Bereichs ermitteln. Und dies möglichst mit einer Formel, da dieser Bremsvorgang mehrere hundert mal am Tag stattfindet.

    mit freundlichen Grüßen
    Manni

     

    Anhänge:

  2. akretschmer

    akretschmer Datenbank-Guru

    Hrm. Window-Funktionen im Einsatz, und PostgreSQL:

    Testdaten, flag ist hier deine Spalte mit 0 oder 1:

    Code:
    test=*# select * from speed order by id;
     id  |  ts  |  speed  | flag
    -----+----------------------------+-------------------+------
      99 | 2017-05-05 10:50:57.478298 |  10 |  1
     100 | 2017-05-05 10:51:57.478298 |  10 |  1
     101 | 2017-05-05 10:52:57.478298 |  10 |  1
     102 | 2017-05-05 10:52:57.977369 |  9.62958489311859 |  0
     103 | 2017-05-05 10:53:07.825635 |  9.44337836047634 |  0
     104 | 2017-05-05 10:53:12.495982 |  8.97695151576772 |  0
     105 | 2017-05-05 10:53:18.298975 |  8.71800468349829 |  0
     106 | 2017-05-05 10:53:23.671053 |  8.6518549574539 |  0
     107 | 2017-05-05 10:53:24.349488 |  8.50251144077628 |  0
     108 | 2017-05-05 10:53:28.571231 |  8.10751779563724 |  0
     109 | 2017-05-05 10:53:32.786024 |  7.89821347501128 |  0
     110 | 2017-05-05 10:53:33.995941 |  7.73598881997167 |  0
     111 | 2017-05-05 10:53:41.280964 |  7.58567395783028 |  0
     112 | 2017-05-05 10:53:42.807535 |  7.29916237154974 |  0
     113 | 2017-05-05 10:53:50.437909 |  7.26726401201448 |  0
     114 | 2017-05-05 10:53:59.972147 |  6.98797417851164 |  0
     115 | 2017-05-05 10:54:03.527661 |  6.75272749969735 |  0
     116 | 2017-05-05 10:54:08.580945 |  6.43284459854475 |  0
     117 | 2017-05-05 10:54:12.287562 |  6.15522681712172 |  0
     118 | 2017-05-05 10:54:16.093522 |  5.97748265974223 |  0
     119 | 2017-05-05 10:54:25.370008 |  5.55366729549132 |  0
     120 | 2017-05-05 10:54:28.253428 |  5.29969331808388 |  0
     121 | 2017-05-05 10:54:31.908672 |  4.88691843044944 |  0
     122 | 2017-05-05 10:54:38.311146 |  4.67023447202518 |  0
     123 | 2017-05-05 10:54:39.553514 |  4.63902359874918 |  0
     124 | 2017-05-05 10:54:41.787066 |  4.36616555205545 |  0
     125 | 2017-05-05 10:54:46.59737  |  4.19399209180845 |  0
     126 | 2017-05-05 10:54:55.299024 |  4.08922572783193 |  0
     127 | 2017-05-05 10:55:01.74879  |  4.07781447120941 |  0
     128 | 2017-05-05 10:55:09.574349 |  3.71060186917892 |  0
     129 | 2017-05-05 10:55:10.440541 |  3.04822015133685 |  0
     130 | 2017-05-05 10:55:20.106478 |  2.65026658959685 |  0
     131 | 2017-05-05 10:55:22.171208 |  2.22553670038467 |  0
     132 | 2017-05-05 10:55:22.990572 |  1.70611539157105 |  0
     133 | 2017-05-05 10:55:23.262149 |  1.28983619287608 |  0
     134 | 2017-05-05 10:55:32.58838  | 0.430510531365851 |  0
     135 | 2017-05-05 10:55:35.690012 |  0.23164193551054 |  0
     136 | 2017-05-05 10:55:40.317554 |  0 |  0
     137 | 2017-05-05 10:56:57.478298 |  0 |  0
     138 | 2017-05-05 10:57:57.478298 |  0 |  0
    (40 Zeilen)
    
    
    Du suchst offenbar alle die, die nachfolgend valid=1 sind:

    Code:
    test=*# select *, case when lead(flag) over(order by id) = 0 and speed > 0 or lag(flag) over (order by id) = 0 and lag(speed) over (order by id) > 0 then 1 else 0 end as valid from speed order by id;
     id  |  ts  |  speed  | flag | valid
    -----+----------------------------+-------------------+------+-------
      99 | 2017-05-05 10:50:57.478298 |  10 |  1 |  0
     100 | 2017-05-05 10:51:57.478298 |  10 |  1 |  0
     101 | 2017-05-05 10:52:57.478298 |  10 |  1 |  1
     102 | 2017-05-05 10:52:57.977369 |  9.62958489311859 |  0 |  1
     103 | 2017-05-05 10:53:07.825635 |  9.44337836047634 |  0 |  1
     104 | 2017-05-05 10:53:12.495982 |  8.97695151576772 |  0 |  1
     105 | 2017-05-05 10:53:18.298975 |  8.71800468349829 |  0 |  1
     106 | 2017-05-05 10:53:23.671053 |  8.6518549574539 |  0 |  1
     107 | 2017-05-05 10:53:24.349488 |  8.50251144077628 |  0 |  1
     108 | 2017-05-05 10:53:28.571231 |  8.10751779563724 |  0 |  1
     109 | 2017-05-05 10:53:32.786024 |  7.89821347501128 |  0 |  1
     110 | 2017-05-05 10:53:33.995941 |  7.73598881997167 |  0 |  1
     111 | 2017-05-05 10:53:41.280964 |  7.58567395783028 |  0 |  1
     112 | 2017-05-05 10:53:42.807535 |  7.29916237154974 |  0 |  1
     113 | 2017-05-05 10:53:50.437909 |  7.26726401201448 |  0 |  1
     114 | 2017-05-05 10:53:59.972147 |  6.98797417851164 |  0 |  1
     115 | 2017-05-05 10:54:03.527661 |  6.75272749969735 |  0 |  1
     116 | 2017-05-05 10:54:08.580945 |  6.43284459854475 |  0 |  1
     117 | 2017-05-05 10:54:12.287562 |  6.15522681712172 |  0 |  1
     118 | 2017-05-05 10:54:16.093522 |  5.97748265974223 |  0 |  1
     119 | 2017-05-05 10:54:25.370008 |  5.55366729549132 |  0 |  1
     120 | 2017-05-05 10:54:28.253428 |  5.29969331808388 |  0 |  1
     121 | 2017-05-05 10:54:31.908672 |  4.88691843044944 |  0 |  1
     122 | 2017-05-05 10:54:38.311146 |  4.67023447202518 |  0 |  1
     123 | 2017-05-05 10:54:39.553514 |  4.63902359874918 |  0 |  1
     124 | 2017-05-05 10:54:41.787066 |  4.36616555205545 |  0 |  1
     125 | 2017-05-05 10:54:46.59737  |  4.19399209180845 |  0 |  1
     126 | 2017-05-05 10:54:55.299024 |  4.08922572783193 |  0 |  1
     127 | 2017-05-05 10:55:01.74879  |  4.07781447120941 |  0 |  1
     128 | 2017-05-05 10:55:09.574349 |  3.71060186917892 |  0 |  1
     129 | 2017-05-05 10:55:10.440541 |  3.04822015133685 |  0 |  1
     130 | 2017-05-05 10:55:20.106478 |  2.65026658959685 |  0 |  1
     131 | 2017-05-05 10:55:22.171208 |  2.22553670038467 |  0 |  1
     132 | 2017-05-05 10:55:22.990572 |  1.70611539157105 |  0 |  1
     133 | 2017-05-05 10:55:23.262149 |  1.28983619287608 |  0 |  1
     134 | 2017-05-05 10:55:32.58838  | 0.430510531365851 |  0 |  1
     135 | 2017-05-05 10:55:35.690012 |  0.23164193551054 |  0 |  1
     136 | 2017-05-05 10:55:40.317554 |  0 |  0 |  1
     137 | 2017-05-05 10:56:57.478298 |  0 |  0 |  0
     138 | 2017-05-05 10:57:57.478298 |  0 |  0 |  0
    (40 Zeilen)
    
    test=*#
    
    Und nun rechnen wir das zusammen:

    Code:
    test=*# select max(ts), min(ts), max(ts)-min(ts) as dauer from (select *, case when lead(flag) over(order by id) = 0 and speed > 0 or lag(flag) over (order by id) = 0 and lag(speed) over (order by id) > 0 then 1 else 0 end as valid from speed order by id) foo where valid = 1;
      max  |  min  |  dauer   
    ----------------------------+----------------------------+-----------------
     2017-05-05 10:55:40.317554 | 2017-05-05 10:52:57.478298 | 00:02:42.839256
    (1 Zeile)
    
    test=*#
    
     
  3. ukulele

    ukulele Datenbank-Guru

    Ich fürchte da ist Access nicht das beste Werkzeug, PostgreSQL, MSSQL oder Oracle wären wohl besser geeignet. Zumal da ja ne ganze Menge Datensätze zusammen kommen wenn man das mal ein Jahr laufen läßt.
     
Die Seite wird geladen...
Ähnliche Themen - negative Flanken erkennen
  1. danschna
    Antworten:
    1
    Aufrufe:
    1.806

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