Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Identifizieren Sie eine Teilmenge von Datensätzen basierend auf Datum und Regeln in SQL Server

Sie können LAG() verwenden und LEAD() Analysefunktionen:

SELECT * FROM (
    SELECT t.*,
           LAG(t.linked,1,0) OVER(ORDER BY t.FromDate DESC) as rnk_1, --Next one
           LEAD(t.linked,1,0) OVER(ORDER BY t.FromDate DESC) as rnk_2, -- Last one,
           LEAD(t.linked,2,0) OVER(ORDER BY t.FromDate DESC) as rnk_3 -- Last two,
    FROM YourTable t) s
WHERE ((s.rnk_1 = 1 OR s.rnk_2 = 1) AND s.linked = 1) OR 
      (s.rnk_2 = 1 and s.rnk_3 = 1 and s.linked = 0)
ORDER BY s.FromDate DESC

Dies führt zu Datensätzen mit linked = 1 und der vorherige/nächste Datensatz ist ebenfalls 1.