wir unser Telefonsystem gerade geändert und alle Mittel werden nun durch alle 15 Minuten protokolliert und wir brauchen 1 Zeile pro EreignisSumme variable Menge von Intervallen zusammen
Tabellenereignis:
empid | code | timestamp | duration
5111 | 5 | 09:45:00 | 45
5222 | 2 | 09:58:00 | 120
5111 | 5 | 10:00:00 | 900
5111 | 5 | 10:15:00 | 900
5111 | 5 | 10:15:30 | 30
5222 | 5 | 11:00:00 | 8
5222 | 5 | 11:00:05 | 5
Zeitstempel writen wird Nach der Tat, so ein Zeitstempel um 9:45:00 mit einer Dauer von 45 war von 9:44:15 und da das Intervall um 9:45 aufhörte, wurde es zu dieser Zeit geschrieben, aber ich brauche 9:44:15 Speichern
Ergebnis sollte mir
gebenDas Problem ist, dass die Telefone mit einer maximalen Verzögerung von 2 Stunden gesperrt sind, und wie Sie mit meinem Mitarbeiter sehen können # 5222 verbrachte er 13 Sekunden auf zwei Zeilen ... ich könnte 10 Mal an der gleichen Tabelle teilnehmen. 1 zu vermeiden, wenn es der gleiche Code ist, wo die Endzeit der vorherigen Zeile
dies auf MSSQL die Startzeit der neuen Linie = 2008
Select e.empid
,e.code
,convert(time(0),DATEADD(ss,- e.Duration, e.timestamp))
,e.duration + isnull(e1.duration,0) + isnull(e2.duration,0)
from [event] e
left join [event] e0 on
convert(TIME(0),DATEADD(ss,- e.Duration, e.timestamp)) = e0.timestamp
and
e.empid = e0.empid
and
e.code = e0.code
left join [event] e1 on
convert(TIME(0),DATEADD(ss,- e1.Duration, e1.timestamp)) = e.timestamp
and
e.empid = e1.empid
and
e.code = e1.code
left join [event] e2 on
convert(TIME(0),DATEADD(ss,- e2.Duration, e2.timestamp)) = e1.timestamp
and
e2.empid = e1.empid
and
e2.code = e1.code
--etc......
where isnull(e0.duration,'-10') = '-10'
Das funktioniert aber bei weitem nicht optimal ist ...
ich würde lieber eine Aggregat-Funktion verwenden, aber ich weiß nicht, wie man es schreibt, da es keinen Comon-Schlüssel gibt, der anders als die letzten Zeitstempel mit neu übereinstimmt - Dauer mit dieser Tabelle!
es ist wichtig zu wissen, dass Agent 5111 am selben Tag wieder auf Code 5 gehen könnte, und ich würde 2 Zeilen für diesen brauchen .... wenn nicht wäre es zu einfach gewesen!
danke im voraus!
Hallo Danke, die Logik in Ordnung scheint, ich verstehe, wie es funktionieren könnte, ja, es ist eine interessante Herausforderung, in der Tat aber in SQL Server 2008 erhalte ich diese Fehlermeldung: ‚führt‘ ist keine anerkannte integriert im Funktionsnamen. ! Ich war so zuversichtlich, als ich es ausprobiert :(gibt es eine andere Option? und ja, wir sind billig, nicht auf SQL Server 2016 zu aktualisieren! Grrrr –
Aktualisiert, um eine äußere Anwendung anstelle der LEAD zu verwenden. Ich denke, es sollte jetzt im Jahr 2008 funktionieren –
Sie sind ein Genie !!!! Ich werde versuchen, mit einem größeren Maßstab, aber es scheint zu sein, was ich wollte, sieht das Ergebnis gut mit dem Testmuster! FANTASTISCH !!!!!!!! Danke danke! –