Taktabfrage

FreeSepp

Benutzer
Beiträge
14
Hallo,
eine Maschine schreibt die Fertigungsdaten je Bauteil in eine Datenbank.
Je Bauteil werden u.A. der Startzeitpunkt und der Endzeitpunkt dokumentiert.
Jedes Bauteil bekommt einen eigenen Datensatz.
Ich möchte die Taktzeit von Bauteil zu Bauteil abfragen, also von Start Bauteil 1 zu Start Bauteil 2 oder von Ende zu Ende, chronologisch sortiert.

Danke & Grüße

FS
 
Werbung:
Dabei können Dir Window-Funktionen helfen, via lag() z.B. kannst Du auf den n-ten Vorgänger (gemäß einder definierten Sortierung) zugreifen. Rest erklärt die Doku.
 
Hallo,
bekomme folgenden Fehler: " ORA-00932: inconsistent datatypes: expected DATE got NUMBER"
--> was muss ich noch tun?
select Bauteil_ID , LAG(RUNSTART,1,0)OVER (Order by RUNSTART) AS RUNSTART_previous
,RUNSTART - LAG(RUNSTART,1,0)OVER (Order by RUNSTART) as Tact_time
from Bauteil_DB;
 
Der dritte Parameter für LAG() ist der default Wert der zurückgegeben wird, wenn es die vorherige Zeile nicht gibt. Du gibst da aber die Zahl 0 zurück - anhand der Fehlermeldung würde ich vermuten, das RUNSTART ein DATE ist - und das klappt natürlich nicht (Die zahl 0 (zero) ist kein valides Datum). Du kannst entweder NULL liefern:
Code:
lag(runstart, 1, null) over ...
was aber das Gleiche ist wie
Code:
lag(runstart) over ...
oder ein Datum was Du stattdessen verwenden willst:
Code:
lag(runstart, 1, date '1900-01-01') over ...
 
Ja, Runstart ist ein DATE.
Mit:
"select LAG(RUNSTART,1, date '01.02.2019 08:33:00', 'DD.MM.YYYY HH24:MI:SS' ) OVER (Order by RUNSTART) AS RUNSTART_prev
,RUNSTART - LAG(RUNSTART,1,0)OVER (Order by RUNSTART) as Tact_time
from …."
bekomme ich nun folgende Meldung: ORA-01861: literal does not match format string
 
OK funktioniert!
Ich bin mal kurz aufgestanden.....

,LAG(RUNSTART,1, null ) OVER (Order by RUNSTART) AS RUNSTART_prev
,round((RUNSTART - LAG(RUNSTART,1, null) OVER (Order by RUNSTART))*24*60,3) as Tact_time

Vielen Dank euch beiden!
LG, F.S.
 
Werbung:
Entweder Du verwendest eine Standard ANSI SQL Datumskonstante:
Code:
DATE '2019-02-01'
oder Du verwendest Oracles to_date() Funktion wenn Du das Datum nicht im ISO Format angeben willst
Code:
to_date('01.02.2019 08:33:00', 'DD.MM.YYYY HH24:MI:SS')
Du kannst nicht beides mischen.
 
Zurück
Oben