Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zidentyfikuj podzbiór rekordów na podstawie daty i reguł w SQL Server

Możesz użyć LAG() i LEAD() funkcje analityczne:

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

Spowoduje to powstanie rekordów, które mają linked = 1 a poprzedni/następny rekord to również 1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Parametr nie działa tak dobrze, jak twarde kodowanie wartości

  2. Jak mogę WSTAWIĆ ZBIORCZO z dodatkową kolumną pokazującą nazwę pliku?

  3. Zwróć wartość Integer z SSIS, wykonaj zadanie SQL

  4. Wydajny sposób na dzielenie ciągów za pomocą CTE

  5. Podstawy zarządzania plikami danych w SQL Server