sql >> Database teknologi >  >> RDS >> Sqlserver

Registrer anomaliintervaller med SQL

Dette må være et af de sværere spørgsmål, jeg har set i dag - tak! Jeg går ud fra, at du kan bruge CTE'er? Hvis ja, så prøv noget som dette:

;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

Og Fiddle . Jeg tilføjede ikke intervallerne, men jeg forestiller mig, at du kan klare den del herfra.

Held og lykke.



  1. ST_DWithin bruger nogle gange ikke indeks

  2. Kan ikke få adgang til SQL-data uden for min while-løkke

  3. Lær hvordan du bruger SQL SELECT med eksempler

  4. Brug af Apostrof i MySQL ENUM-værdi, der vil udfylde HTML-kombiboks til databasesøgning