PROBLEMOracle 11g - SQL-Zeitdifferenz zwischen mehreren Reihen
ich noch zu ermitteln bin meine Füße mit SQL zu finden und zu berechnen versucht, wie lange ein bestimmter Benutzer Gegenstände bei ihrer Verschiebung Scannen wurde.
Jeder Scan Timestamped wird eine eindeutige Sequenznummer 9 digit Erzeugen (SEQ Spalte) und Datum/Uhrzeit im Format 05-NOV-16 15:35:24
(the_date Spalte).
Die Person scannt möglicherweise mehrere Stunden, und was ich versuche, ist, den ersten Zeitstempel, den sie generiert haben, vom letzten Zeitstempel am Ende der Schicht abzuziehen.
So zum Beispiel angesichts dieser Daten Beispiel:
+-----------+--------------------+--------+---------+---------+------------+-----------+
| SEQ | THE_DATE | SCANID | LOCATN | USER_ID | FIRST_NAME | LAST_NAME |
+-----------+--------------------+--------+---------+---------+------------+-----------+
| 103939758 | 05-NOV-16 14:36:22 | 194972 | DOOR 19 | AX9868 | Mike | Derry |
| 103939780 | 05-NOV-16 14:38:07 | 194972 | DOOR 19 | AX9868 | Mike | Derry |
| 103939792 | 05-NOV-16 14:39:24 | 194972 | DOOR 19 | AX9868 | Mike | Derry |
| 103940184 | 05-NOV-16 15:16:53 | 194972 | DOOR 19 | AX9868 | Mike | Derry |
| 103940185 | 05-NOV-16 15:51:41 | 194972 | DOOR 19 | AX9868 | Mike | Derry |
| 103940214 | 05-NOV-16 09:51:42 | 194993 | DOOR 16 | BC1910 | Tony | McCann |
| 103940215 | 05-NOV-16 15:19:06 | 194993 | DOOR 16 | BC1910 | Tony | McCann |
|+-----------+--------------------+--------+---------+---------+------------------------
Gewünschtes Ergebnis
Ich mag würde den Zeitstempel in der ersten Reihe für Mike Derry, aus der letzten Reihe subtrahieren, auf dem er erscheint , Zeile 5 in diesem Fall, so dass ich eine Antwort in Stunden (1,25) habe.
Das Endergebnis sollte nach Tag und nach user_id, first_name und last_name gruppiert werden.
Bisher habe ich online und bei der Orakeldokumentation geschaut, was mich dazu brachte, die LEAD-Funktion zu versuchen, die vielversprechend schien. In den nächsten Zeilen wird nach dem nächsten Zeitstempel gesucht, an dem eine Benutzer-ID als nächstes angezeigt wird, und anschließend nach Partitionen mit dieser Benutzer-ID, um eine neue Spalte mit diesem Zeitstempel zu erstellen.
So sah der SQL diese wie
SELECT SEQ, THE_DATE,SCANID,LOCATN,USER_ID,LEAD(SYSDAT) OVER (PARTITION BY USER_ID ORDER BY SYSDAT) AS NEXT_SCAN
FROM myTable...
dies jedoch ist mir falsche Ergebnisse geben, da sie die Zeitdifferenz zählen zu verdoppeln scheint. Ich bin sicher, Sie SQL-Gurus haben einen eleganteren Weg, um dieses, wie ich glaube nicht, diese Funktion passt dieses spezielle Problem :)
Also das Endergebnis im erreichen versuchen, ist:
+-----------+---------+------------+-----------+-----------+
| THE_DATE | USER_ID | FIRST_NAME | LAST_NAME | TOTAL_HRS |
+-----------+---------+------------+-----------+-----------+
| 05-NOV-16 | AX9868 | Mike | Derry | 1.25 |
| 05-NOV-16 | BC1910 | Tony | McCann | 5.47 |
+-----------+---------+------------+-----------+-----------+
Ihre Hilfe ist viel
geschätzt
welcher Typ ist 'THE_DATE'? Timestamp oder Varchar? –
hallo ist ein DATE-Typ. danke – Nick