2017-02-21 8 views
1

Ich brauche eine Abfrage, um verschachtelte Daten von 'Start' und 'Ende' Zeiten in eine saubere Ausgabe zu paaren, aber meine Haupthürde ist mit, wie die Daten in einem verschachtelten Format innerhalb der gespeichert werden ProcessTimer Tabelle.Abfrage zu paarweise verschachtelten Anfangs- und Endzeiten

Eingang Tabelle 1

Ich habe eine Tabelle ProcessTimer mit drei Spalten genannt.

  • ProcessTimerId INT (PRIMARY KEY)
  • ProcessTimerDatetime DATETIME-
  • ProcessTimerAction VARCHAR (5)
  • ProcessId INT (FOREIGN KEY)

'ProcessTimerAction 'wird immer nur auf den Wert' START 'oder' STOP 'gesetzt, der an die Spalte' ProcessTimerDatetime 'anschließt, da' ProcessTimerDatetime 'einen DATETIME-Wert speichert, wenn ein Prozess gestartet oder gestoppt wurde.

Jeder Prozess wird über einen ProcessId identifiziert, und das Link zu einer anderen Tabelle genannt Prozess, die einige Details über jeden Prozess hat.

Eingangstisch 2

Die Prozess Tabelle eingerichtet ist, wie folgt:

  • ProcessId INT (PRIMARY KEY)
  • Process VARCHAR (255)
  • ProcessOwner VARCHAR (255)

Logischer, eine Startaktion des Prozesses sollte immer von einer STOP-Aktion folgen, und die Anzeige in Paaren jedoch Fehler in den Daten bedeuten, dass es nicht immer eine STOP-Aktion für jeden START Aktion . In diesen Fällen gibt es nichts, was ich tun kann, aber eine NULL für den fehlenden STOP-Eintrag angezeigt

Wunsch Ausgang

Ich mag die Daten in Raster mit den folgenden Überschriften darstellen.

  • ProcessOwner
  • Process
  • PROCESS
  • ProcessEndTime

Hat jemand erreicht so etwas wie dies vor?

Ich bin mir nicht sicher, wie ich damit anfangen soll, die Abfrage zu erstellen, die ich brauche.

Beispiel Daten

ProcessTimer Tabelle

ProcessTimerId,ProcessTimerDatetime,ProcessTimerAction,ProcessId 
1,1/1/2017 08:00:34,START,883 
2,1/1/2017 08:03:76,STOP,883 
3,1/1/2017 08:03:77,START,445 
4,1/1/2017 08:03:79,START,636 
5,1/1/2017 08:05:77,STOP,445 
6,1/1/2017 08:07:34,START,445 
7,1/1/2017 08:09:23,START,445 
8,1/1/2017 08:12:61,STOP,636 
9,1/1/2017 08:14:65,STOP,445 

Prozess Tabelle

ProcessId,ProcessName,ProcessOwner 
445,CTC hourlies,Sarah Parkes 
636,Garage import,John Dean 
883,DF task,Kate Duke 
+0

Sprichst du auf einer Zeile, um die Start- und Stoppzeit zu bekommen? – Snowlockk

+0

Wenn ja In einer Zeile_Nummer Partitioniert von ProcessId. Join auf sich selbst mit dem RID = RID + 1 UND ProcessId = ProcessId – Snowlockk

Antwort

1

Hier ist eine Implementierung:

Ausgang für oben Daten:

ProcessOwner | ProcessName | StartTime | EndTime 

445 |Sarah Parkes| CTC hourlies| 1/1/2017 08:03:77| 1/1/2017 08:05:77 

445 |Sarah Parkes| CTC hourlies| 1/1/2017 08:07:34| NULL 

445 |Sarah Parkes| CTC hourlies| 1/1/2017 08:09:23| 1/1/2017 08:14:65 

636 |John Dean| Garage import| 1/1/2017 08:03:79| 1/1/2017 08:12:61 

883 |Kate Duke| DF task| 1/1/2017 08:00:34| 1/1/2017 08:03:76 
+0

Die einzige Änderung, die ich machen musste, war 'OVER (PARTITION von ProcessId ORDER BY ProcessTimerId) AS [RNO] 'zu OVER (PARTITION von ProcessId ORDER BY ProcessTimerDateTime) AS [rno] '. Ich denke, das liegt daran, dass manchmal die Zeiten außerhalb der Reihenfolge in die Datenbank eingegeben werden können. Klingt das gut zu dir? Ich habe derzeit meine L-Platten auf mit dieser Abfrage zu verstehen. –

+0

Klingt gut! Lassen Sie mich wissen, wenn Sie irgendwelche Erklärungen benötigen. – Shruti

Verwandte Themen