यह मेरे द्वारा आज देखे गए कठिन प्रश्नों में से एक होना चाहिए - धन्यवाद! मुझे लगता है कि आप सीटीई का उपयोग कर सकते हैं? अगर ऐसा है, तो कुछ इस तरह आज़माएँ:
;WITH Filtered
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY dateField) RN, dateField, Status
FROM Test
)
SELECT F1.RN, F3.MinRN,
F1.dateField StartDate,
F2.dateField Enddate
FROM Filtered F1, Filtered F2, (
SELECT F1a.RN, MIN(F3a.RN) as MinRN
FROM Filtered F1a
JOIN Filtered F2a ON F1a.RN = F2a.RN+1 AND F1a.Status = 2 AND F2a.Status <> 2
JOIN Filtered F3a ON F1a.RN < F3a.RN AND F3a.Status <> 2
GROUP BY F1a.RN ) F3
WHERE F1.RN = F3.RN AND F2.RN = F3.MinRN
और Fiddle . मैंने अंतराल नहीं जोड़ा, लेकिन मुझे लगता है कि आप उस हिस्से को यहां से संभाल सकते हैं।
शुभकामनाएँ।