Tenemos varias máquinas que registran datos en una base de datos a intervalos esporádicos. Para cada registro, me gustaría obtener el período de tiempo entre esta grabación y grabación previa.Optimizar ROW_NUMBER() en SQL Server
que pueda hacer esto utilizando ROW_NUMBER de la siguiente manera:
WITH TempTable AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Machine_ID ORDER BY Date_Time) AS Ordering
FROM dbo.DataTable
)
SELECT [Current].*, Previous.Date_Time AS PreviousDateTime
FROM TempTable AS [Current]
INNER JOIN TempTable AS Previous
ON [Current].Machine_ID = Previous.Machine_ID
AND Previous.Ordering = [Current].Ordering + 1
El problema es, que va realmente lenta (varios minutos sobre una mesa con unos 10k entradas) - He intentado crear índices del separados en Machine_ID y Date_Time, y un único índice unido, pero nada ayuda.
¿Hay alguna forma de reescribir esta consulta para ir más rápido?
La segunda consulta finaliza en segundos en lugar de en minutos, pero la primera consulta se ejecuta más rápido de lo que puedo cronometrarla. ¡Perfecto gracias! –