में ROW_NUMBER() को अनुकूलित करना हमारे पास कई मशीनें हैं जो स्पोरैडिक अंतराल पर डेटाबेस में डेटा रिकॉर्ड करती हैं। प्रत्येक रिकॉर्ड के लिए, मैं के बीच रिकॉर्डिंग और पिछली रिकॉर्डिंग के बीच की अवधि अवधि प्राप्त करना चाहता हूं।SQL सर्वर
मैं इस प्रकार इस 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
समस्या है, यह वास्तव में धीमी गति से (कई मिनट एक मेज पर 10k के बारे में प्रविष्टियों के साथ) चला जाता है - मैं Machine_ID और पर अलग indicies बनाने की कोशिश की डेट_Time, और एक एकल जुड़ाव सूचकांक, लेकिन कुछ भी मदद करता है।
क्या इस प्रश्न को फिर से लिखने के लिए फिर से लिखना है?
दूसरी क्वेरी मिनटों के बजाय सेकंड में समाप्त होती है, लेकिन पहली क्वेरी जितनी जल्दी हो सकती है उससे अधिक तेज़ी से निष्पादित होती है। बहुत बहुत धन्यवाद! –