Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Identifique o subconjunto de registros com base na data e nas regras no SQL Server


Você pode usar LAG() e LEAD() funções analíticas:
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

Isso resultará em registros que têm linked = 1 e o registro anterior/seguinte também é 1.