2016-11-22 1 views
0

Ich habe einige digitale Flags, die in InTouch Historian eingeloggt sind. Ich möchte herausfinden, wie lange dieses Signal AN blieb (kumulativ). z.B.Wie verwende ich den digitalen Status in der SQL-Datenbank, um die Verfügbarkeit des Geräts zu ermitteln

DateTime      Status 
------------------------------------- 
22/11/2016 15:33:00    1 
22/11/2016 15:33:40    0 
22/11/2016 15:34:25    1 
22/11/2016 15:34:56    1 
22/11/2016 15:35:30    1 
22/11/2016 15:35:57    0 
22/11/2016 15:36:42    0 
22/11/2016 15:37:18    1 
etc 

Die Frage ist also, wie die Gesamtdauer zu berechnen, für die das Signal hoch war (1)

Erwartete Ausgabe:

22/11/2016 15:33:40 - 22/11/2016 15:33:00 = 40s 
22/11/2016 15:35:57 - 22/11/2016 15:34:25 = 92s 

so sollte die Ausgabe seiner 132s oder 02.12

+1

plz zeigen erwartete Ausgabe – TheGameiswar

+2

Welche Datenbankplattform? – OldProgrammer

+0

Es ist SQL-Datenbank und ich brauche dies zum Erstellen von Berichten mit SSRS –

Antwort

0
;WITH StatusOn (LoggedDate) 
AS(
SELECT 
    th.LoggedDate 
from 
    [dbo].[InTouchHistory] th 
left join 
    [dbo].[InTouchHistory] th2 
    ON th2.LoggedDate = (SELECT MAX(LoggedDate) FROM [dbo].[InTouchHistory] 
         WHERE [LoggedDate] < th.LoggedDate) 
WHERE 
    ISNULL(th2.Status, 0) = 0 
    and th.Status = 1 
) 
SELECT 
    SUM(DATEDIFF(second, th1.LoggedDate, th2.LoggedDate)) 
FROM StatusOn th1 
INNER JOIN 
    [dbo].[InTouchHistory] th2 
    ON th2.LoggedDate = (SELECT MIN(LoggedDate) FROM [dbo].[InTouchHistory] 
         WHERE [LoggedDate] > th1.LoggedDate AND Status = 0) 
+0

Ich habe Testansicht erstellt, und es funktioniert, aber Start Problem, wenn ich obigen Code für tatsächliche [Runtime] implementieren. [Dbo]. [AnalogHistory] anzeigen. Ich habe dem obigen Code Tagname Like-Ausdrücke hinzugefügt, die die dritte Spalte in der obigen Tabelle (View) sind, um nur erforderliche Tags in der Datenbank zu filtern. Irgendwelche Vorschläge? –

Verwandte Themen