Chúng tôi có một số máy ghi dữ liệu vào cơ sở dữ liệu theo các khoảng thời gian lẻ tẻ. Đối với mỗi bản ghi, tôi muốn có khoảng thời gian giữa bản ghi này và ghi trước đó.Tối ưu ROW_NUMBER() trong SQL Server
tôi có thể làm điều này bằng ROW_NUMBER như sau:
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
Vấn đề là, nó đi thực sự chậm (vài phút trên một bảng với khoảng 10k mục) - Tôi cố gắng tạo indicies riêng về Machine_ID và Date_Time và một chỉ mục tham gia, nhưng không có gì hữu ích.
Có cách nào để viết lại truy vấn này để đi nhanh hơn không?
Truy vấn thứ hai kết thúc sau vài giây thay vì phút, nhưng truy vấn đầu tiên thực thi nhanh hơn tôi có thể. Hoàn hảo - cảm ơn! –