sql >> Database >  >> RDS >> Sqlserver

Identificeer subset van records op basis van datum en regels in SQL Server

U kunt LAG() . gebruiken en LEAD() analytische functies:

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

Dit resulteert in records die linked = 1 . hebben en het vorige/volgende record is ook 1.



  1. Maak een afbeeldingstrackback voor een externe webuitgever om naar mijn site te linken

  2. Oracle:meerdere tabelupdates => ORA-01779:kan geen kolom wijzigen die is toegewezen aan een niet-sleutelbewaarde tabel

  3. MySQL importeer database maar negeer specifieke tabel

  4. Rij naar kolom transformatie van verschillende tabellen (union) in MySQL versie 8.0.17 met Pivot