我們有許多機器以零星的間隔將數據記錄到數據庫中。對於每條記錄,我想獲得此錄製和之前的錄製之間的時間段。在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