Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Identifier le sous-ensemble d'enregistrements en fonction de la date et des règles dans SQL Server

Vous pouvez utiliser LAG() et LEAD() fonctions analytiques :

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

Cela se traduira par des enregistrements qui ont linked = 1 et l'enregistrement précédent/suivant est également 1.