Ich hoffe, du kannst mir helfen.
Ich muss die Datensätze in der Tabelle HH_Solution_Audit anzeigen - wenn zwei oder mehr Mitarbeiter den Raum innerhalb von 10 Minuten betreten. Hier sind die Anforderungen:
HH_Solution_Audit Tabellendetails:
Folgendes habe ich bis jetzt bekommen. Dies erfüllt nur die Anforderung Nr. 1.
%Vor% %Vor% Beim Ausführen der Abfrage werden IDs zurückgegeben:
1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14
Dies erfüllt die Anforderung Nr. 1 mit einem Intervall von weniger als oder gleich 10 Minuten zwischen der vorherigen Zeile, der aktuellen Zeile und der nächsten Zeile.
Können Sie mir bei der 2. Anforderung helfen? Wenn es angewendet wird, sollten die zurückgegebenen IDs nur lauten:
13, 14
Hier ist eine Idee. Sie benötigen ROW_NUMBER und vorherige und nächste Datensätze nicht. Sie müssen nur unioned abfragen - einer sucht nach jedem, der X Minuten hinter sich hat, und einem anderen, der X Minuten im Voraus sucht. Jeder verwendet eine korrelierte Unterabfrage und COUNT (*), um die Anzahl der übereinstimmenden Personen zu finden. Wenn die Anzahl größer ist als deine @numOfPersonen - das war's.
BEARBEITEN: neue Version: Statt zwei Abfragen mit 10 Minuten im Voraus und hinterher zu machen, werden wir nur nach 10 Minuten nachsehen - diejenigen auswählen, die in cteLastOnes übereinstimmen. Danach wird in einem anderen Teil der Abfrage nach denen suchen, die tatsächlich innerhalb dieser 10 Minuten existieren. Letztlich wieder die Vereinigung von ihnen und den "Letzten"
%Vor%Tags und Links sql sql-server sql-server-2008 tsql