SQL-Filterung auf einzigartige Ereignisse und datetime

Ich habe diese Frage vorher gestellt, aber die Post gelöscht.

Hier ist meine Frage: Ich habe eine Tabelle in SQL server mit mehreren Ereignissen in der Tabelle, ich versuche, die Ereignisse und die datetime zwischen den Ereignissen auf einem bestimmten X min zu filtern.

Ich brauche Hilfe bei T-SQL Abfragen.

Was kann die Verwendung verwenden, um die folgenden zu tun (alle Links werden geschätzt): nehmen event_id und datetime des Gerätes, vergleiche mit einer list von anderen event_id 's, um zu sehen, ob es irgendwelche anderen Ereignisse mit den letzten 24 min für dieses Gerät gibt.

Was würde für mich funktionieren? Verschachtelte Abfragen? Wo Klausel? CTE

Ich habe versucht 6 Abfragen, aber nicht immer das Ergebnis, das ich brauche, benutze ich (max) datetime und dann bei event_ID vergleichen?

Ich weiß, das ist nicht viel, aber irgendeine Hilfe oder Links würde geschätzt ….

Auf Anfrage (Vollständige Abfrage keine Änderungen) 1.

 SELECT A.[Unit_id] ,A.[TransDate] ,A.[event_id] ,A.[event_msg] ,B.[TransDate] ,B.[event_id] ,B.[event_msg] FROM (Select A.[Unit_id] ,MAX(A.[TransDate]) AS Transdate ,A.[event_id] ,A.[event_msg] FROM [JammingEvents].[dbo].[EventLogExtended] AS A WHERE event_id = '345' GROUP BY A.[Unit_id] ,A.[event_id] ,A.[event_msg] ) AS A INNER JOIN (SELECT B.[Unit_id] ,MAX(B.[TransDate]) AS Transdate ,B.[event_id] ,B.[event_msg] FROM [JammingEvents].[dbo].[EventLogExtended] AS B WHERE B.event_id = '985' GROUP BY B.[Unit_id] ,B.[event_id] ,B.[event_msg] ) AS B ON A.Unit_id = B.Unit_id WHERE (B.TransDate BETWEEN DATEADD(MINUTE,-24,A.Transdate) AND DATEADD(MINUTE,24,A.Transdate)) 

Das funktioniert aber nur, wenn man 2 Event Id's vergleicht. das Problem ist, muss ich dies auf einer Massenwaage tun.

2

 SET NOCOUNT ON GO SELECT MAX(ELE.Transdate) AS Transdate ,ELE.[Unit_id] ,ELE.[event_id] ,ELE.[event_msg] ,ELE.[Latitude] ,ELE.[Longitude] ,ELE.[date_ack] ,ELE.[user_id_ack] ,ELE.[date_closed] ,ELE.[user_id_closed] ,ELE.[action] ,ELE.[EventSeqNo] ,ELE.[MsgSeqNo] ,ELE.[Speed] ,ELE.[Heading] ,ELE.[Status1] ,ELE.[Status2] ,ELE.[GeoLocation] ,ELE.[Reg_No] ,ELE.[Company] ,ELE.[Fleet_Code] ,ELE.[IgnStatus] ,ELE.[comboActioned] FROM [JammingEvents].[dbo].[EventLogExtended] ELE INNER JOIN ( SELECT F.Transdate ,F.[Unit_id] ,F.[event_id] ,F.[event_msg] ,F.[Latitude] ,F.[Longitude] ,F.[date_ack] ,F.[user_id_ack] ,F.[date_closed] ,F.[user_id_closed] ,F.[action] ,F.[EventSeqNo] ,F.[MsgSeqNo] ,F.[Speed] ,F.[Heading] ,F.[Status1] ,F.[Status2] ,F.[GeoLocation] ,F.[Reg_No] ,F.[Company] ,F.[Fleet_Code] ,F.[IgnStatus] ,F.[comboActioned] FROM [JammingEvents].[dbo].[EventLogExtended] AS F WHERE F.event_id IN ('302' ,'303' ,'304' ,'305' ,'309' ,'340' ,'341' ,'345' ,'962' ,'963' ,'973' ,'974' ,'975' ,'976' ,'985' ,'987' ,'989' ,'C220' ,'C222' ,'C224' ,'C227' ,'C228') ) AS A ON ELE.Unit_id = A.Unit_id INNER JOIN ( SELECT G.Transdate ,G.[Unit_id] ,G.[event_id] ,G.[event_msg] ,G.[Latitude] ,G.[Longitude] ,G.[date_ack] ,G.[user_id_ack] ,G.[date_closed] ,G.[user_id_closed] ,G.[action] ,G.[EventSeqNo] ,G.[MsgSeqNo] ,G.[Speed] ,G.[Heading] ,G.[Status1] ,G.[Status2] ,G.[GeoLocation] ,G.[Reg_No] ,G.[Company] ,G.[Fleet_Code] ,G.[IgnStatus] ,G.[comboActioned] FROM [JammingEvents].[dbo].[EventLogExtended] AS G WHERE G.event_id = '345' ) AS B ON A.Unit_id = B.Unit_id WHERE (ELE.TransDate BETWEEN DATEADD(MINUTE,-24,A.Transdate) AND DATEADD(MINUTE,24,A.Transdate)) AND (ELE.event_id IN ( '302' ,'303' ,'304' ,'305' ,'309' ,'340' ,'341' ,'345' ,'962' ,'963' ,'973' ,'974' ,'975' ,'976' ,'985' ,'987' ,'989' ,'C220' ,'C222' ,'C224' ,'C227' ,'C228' )) AND (ELE.action = '0') GROUP BY ELE.TransDate ,A.Unit_id ,ELE.[Unit_id] ,ELE.[event_id] ,ELE.[event_msg] ,ELE.[Latitude] ,ELE.[Longitude] ,ELE.[date_ack] ,ELE.[user_id_ack] ,ELE.[date_closed] ,ELE.[user_id_closed] ,ELE.[action] ,ELE.[EventSeqNo] ,ELE.[MsgSeqNo] ,ELE.[Speed] ,ELE.[Heading] ,ELE.[Status1] ,ELE.[Status2] ,ELE.[GeoLocation] ,ELE.[Reg_No] ,ELE.[Company] ,ELE.[Fleet_Code] ,ELE.[IgnStatus] ,ELE.[comboActioned] ORDER BY ELE.TransDate, ELE.Unit_id DESC 

so weit das hat mir das nächste, aber ich habe keine Ahnung, was zu tun ist, ich bin sehr schlecht mit SQL-Syntax und Schreiben von Abfragen.

Sie könnten eine exists Unterabfrage verwenden, um zu verlangen, dass es ein anderes Ereignis für das gleiche Gerät innerhalb der vorangegangenen 24 Minuten gab:

 select * from Events e1 where exists ( select * from Events e2 where e2.Device_ID = e1.Device_ID and e2.event_dt between dateadd(minute, e1.event_dt, -24) and e1.event_dt ) 

Selbstverknüpfung sollte auch funktionieren:

 SELECT *, DATEDIFF(minute,b.transdate,a.transdate) diff FROM EventLogWxtended a JOIN eventLogExtended b ON (a.unit_id=b.unit_id AND b.transdate<a.transdate AND DATEDIFF(minute,b.transdate,a.transdate)<24)