我们有许多机器以零星的间隔将数据记录到数据库中。对于每条记录,我想获得此录制和之前的录制之间的时间段。在SQL Server中优化ROW_NUMBER()
如下,我可以做到这一点使用ROW_NUMBER:
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
的问题是,它会真的慢(几分钟桌子上有大约10,000项) - 我试图创建于Machine_ID和独立indicies Date_Time和单个联合索引,但没有任何帮助。
无论如何重写这个查询更快?
第二个查询以秒为单位而不是以分钟为单位完成,但第一个查询的执行速度比我的时间要快。很好,谢谢! – 2010-06-03 14:52:03