sql >> Databáze >  >> RDS >> Sqlserver

Detekce intervalů anomálií pomocí SQL

Tohle musí být jedna z nejtěžších otázek, které jsem dnes viděl – díky! Předpokládám, že můžete použít CTE? Pokud ano, zkuste něco takového:

;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

A Fiddle . Intervaly jsem nepřidal, ale myslím, že tu část zvládnete odtud.

Hodně štěstí.



  1. mysql:jak sčítat vynásobené části

  2. Vytvoření vlastní sady výsledků v MySQL

  3. Mysql-dev pro mac os

  4. PostgreSQL vs. MySQL