Das wird wie eine lahme Frage für alle Experten in SQL Server Ansichten erscheinen, aber ...SQL-Abfrage: Zeitdifferenz
Also habe ich eine kleine Menge von Daten, die mein Mandant für Berichtszwecke benötigt. Ich muss zugeben, dass ich zwar ihre Berichtspflichten gestellt habe, aber bis jetzt sehe ich, dass meine db besser optimiert werden kann.
Eines der Stücke von Daten, die sie wollen, ist die Zeitdifferenz zwischen zwei Aufgaben, die ausgeführt haben:
select caseid, hy.createdate
from app_history hy
where hy.activityid in (303734, 303724)
Das gibt mir zwei Reihen (nach edit) pro Fall-Vorlage, die dann gemessen werden müssen ; aber ein paar Wackeln: Aktivität 303734 wird immer ausgeführt, Aktivität 303724 könnte ausgeführt werden. Die Kombinationen 303734 und 303724 entsprechen einander. Vorrausgesetzt ein Fall kann 1 un-matched 303734 mit einem zusammenpassenden Paar danach auf der 2. Vorlage haben. Das Zusammenpassen könnte auf Intuition zurückzuführen sein. Nicht gut. Es gibt möglicherweise mehr als eine Einreichung pro caseid und wenn dies der Fall ist, werden beide Aktivitäten jedes Mal ausgeführt. Es gibt keine Möglichkeit, die Übermittlungsnummer in diese Tabelle zu schreiben.
Die Tabelle app_history enthält userid, caseid und activityid als Fremdschlüssel. Die PK ist die Identitätsspalten-ID.
Gibt es eine bessere Möglichkeit, die Abfrage zu schreiben?
AFter Hilfe von KM:
select
c.id, c.submissionno, hya.caseid, hya.createtime, hyb.caseid, hyb.createtime
,CASE
WHEN hyb.caseid IS NOT NULL THEN DATEDIFF(mi,hya.createtime,hyb.createtime)
ELSE NULL
END AS Difference
from app_case c
inner join app_history hya on c.id = hya.caseid
left outer join app_history hyb on c.id = hyb.caseid
where hya.activityid in (303734) and hyb.activityid in (303724) order by c.id asc
Das funktioniert fast.
Ich habe jetzt das Problem:
460509|2|460509|15:15:39.000|460509|15:16:13.000|1
460509|2|460509|15:15:39.000|460509|15:18:13.000|3
460509|2|460509|15:17:52.000|460509|15:16:13.000|-1
460509|2|460509|15:17:52.000|460509|15:18:13.000|1
So bin ich jetzt 1 Reihe bekommen jeder der beiden für jede der vier Reihen zu vergleichen ... mmm Ich denke, es ist das Beste ich hoffen kann. :(
Wenn Sie „immer sagen run "and" might run ", bedeutet das, dass" createate "nicht gesetzt wurde/ist" NULL "? –
Wenn die Aktivität nicht ausgeführt wird, wird sie nicht in die Tabelle app.history geschrieben. – Sean
welche Version von SQL Server und was ist die PK von app_history (ist es eine Identität?) –