Wir haben eine Reihe von Rechnern, die in sporadischen Abständen Daten in einer Datenbank aufzeichnen. Für jeden Datensatz möchte ich die Zeitspanne zwischen こん Aufnahme und die vorherige Aufnahme.
Ich kann dies mit ROW_NUMBER wie folgt tun:
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
Das Problem ist, dass es vraiment langsam (mehrere Minuten bei einer Tabelle mit etwa 10k Einträgen) - ich habe versucht, separate Indizes für Machine_ID und Date_Time sowie einen einzelnen Join-Index zu erstellen, aber nichts hilft.
Gibt es eine Möglichkeit, diese Abfrage umzuschreiben, um schneller zu werden?