Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wykrywaj odstępy anomalii za pomocą SQL

To musi być jedno z trudniejszych pytań, jakie dzisiaj widziałem - dzięki! Zakładam, że możesz używać CTE? Jeśli tak, spróbuj czegoś takiego:

;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

Oraz Skrzypce . Nie dodałem interwałów, ale wyobrażam sobie, że możesz sobie z tym poradzić.

Powodzenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. identyfikator pracownika automatycznie generuj z prefiksem

  2. SQL Server 2008 Zmiana przechwytywania danych, kto dokonał zmiany?

  3. Jak zaimportować plik JSON do tabeli serwera SQL?

  4. Przechowuj macierz w SQL Server 2008

  5. 5 świetnych zasobów, które pomogą Ci w pełnieniu roli monitorowania bazy danych