Ich habe eine Tabelle mit Informationen zum Arbeitsstatus eines Benutzers auf einem mobilen Gerät. Jedes Mal, wenn sich ihr Status ändert, wird eine neue Zeile mit ihrem ursprünglichen Status vor der Änderung und ihrem aktuellen Status erstellt. Die Tabelle sieht wie folgt aus:SQL berechnet Zeitdifferenz zwischen zwei Zeilen, die bestimmte Werte enthalten
ID Date_Time User OriginalStatus NewStatus
---------------------------------------------------------------------------
60713 2017-04-11 12:14:42 Helen Not Started Active
60714 2017-04-11 12:19:20 Monica Active Paused
60715 2017-04-11 12:20:43 Dave Active Paused
60716 2017-04-11 12:32:18 Helen Finished Archived
60717 2017-04-11 12:48:57 Monica Paused Active
60718 2017-04-11 12:52:35 Dave Paused Active
Was ich versuche, die Dauer zu tun ist, zu berechnen, die jeder Benutzer bleibt im Status ‚Angehalten‘ an jedem Tag ... sie sind wieder nur erlaubt, sich von ‚Angehalten‘ auf "Aktiv", was das Ende ihrer "Pausiert" -Zeit anzeigt, und alle anderen Zeilen können ignoriert werden, und die Änderungen von "Pausiert" zurück zu "Aktiv" werden nicht in aufeinanderfolgenden Zeilen sein.
Im obigen Beispiel ist Monica für 29 Minuten und 37 Sekunden (12:19:20 bis 12:48:57) "Paused" geblieben und Dave ist 31 Minuten und 52 Sekunden "Paused" (12: 20:43 bis 12:52:35).
Im Idealfall würde ich gerne Ergebnisse ähnlich wie:
User Paused_Start_Time Paused_End_Time Paused_Duration
---------------------------------------------------------------------------
Monica 2017-04-11 12:19:20 2017-04-11 12:48:57 00:29:37
Dave 2017-04-11 12:20:43 2017-04-11 12:52:35 00:31:52
ich ratlos bin, wie diese geht über die Arbeit aus, so dass alle dankbar empfangen helfen. Ich bin mit SQL Server 2012.
Speziell für SQL-Fragen ist es besser zu erwähnen DBMS-Version, die Sie verwenden. – niksofteng