Try this and see if it is faster-- stage the history logCREATE TABLE #Stage ( RowID INT IDENTITY PRIMARY KEY, EventID INT, ApplicationID INT, TechnologyID INT, MachineName VARCHAR(20), CreateDate DATETIME )-- copy the data in the wanted orderINSERT #Stage ( EventID, ApplicationID, TechnologyID, MachineName, CreateDate )SELECT EventID, ApplicationID, TechnologyID, MachineName, CreateDateFROM tHistoryLogORDER BY EventID, ApplicationID, TechnologyID, MachineName, CreateDate DESC-- create a temporary table for each groupCREATE TABLE #Temp ( MinRowID INT, MaxRowID INT )-- select each group rangeINSERT #Temp ( MinRowID, MaxRowID )SELECT MIN(RowID) AS MinRowID, 4 + MIN(RowID) AS MaxRowIDFROM #StageGROUP BY EventID, ApplicationID, TechnologyID, MachineName-- show the groups of dataSELECT s.EventID, s.ApplicationID, s.TechnologyID, s.MachineName, s.CreateDateFROM #Stage AS sINNER JOIN #Temp AS t ON t.MinRowID <= s.RowID AND t.MaxRowID >= s.RowIDORDER BY s.RowID-- clean up temporary tablesDROP TABLE #TempDROP TABLE #Stage
Peter LarssonHelsingborg, Sweden