sql >> Databasteknik >  >> RDS >> Sqlserver

Upptäck anomaliintervall med SQL

Det här måste vara en av de svårare frågorna jag har sett idag - tack! Jag antar att du kan använda CTE? Om så är fallet, prova något i stil med detta:

;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

Och Fiol . Jag har inte lagt till intervallerna, men jag antar att du kan hantera den delen härifrån.

Lycka till.



  1. Konvertera från UniqueIdentifier till BigInt och tillbaka?

  2. Hur man markerar ett visst antal rader i tabellen vid samtidig åtkomst

  3. Välj värde om villkor i SQL Server

  4. MySQL VIEW vs. inbäddad fråga, vilken är snabbare?