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

SQL WYBIERANIE WIERSZ

Można to łatwo zrobić za pomocą row_number() funkcja okna:

; with  numbered as
        (
        select  row_number() over (order by [time]) rn
        ,       count(*) over() as cnt
        ,       *
        from    Table1
        )
select  *
from    numbered cur
left join
        numbered prev
on      cur.rn = prev.rn + 1
left join
        numbered next
on      cur.rn = next.rn - 1
where   cur.rn in (1, cur.cnt) -- first or last row
        or (cur.id = 'start' and prev.id = 'stop') -- start after stop
order by
        cur.rn

Przykład na żywo w SQL Fiddle.

Nie oznacza to, że przykładowe dane wyjściowe nie spełniają Twoich wymagań. Zawiera kilka wierszy, które nie spełniają żadnego z trzech kryteriów (pierwszy wiersz, ostatni wiersz, początek po zatrzymaniu).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. warunek if-else do aktualizacji tabeli w procedurze składowanej w SQL Server 2005

  2. DateTime.Now do smalldatetime?

  3. zsumuj niektóre wartości węzłów xml w serwerze sql 2008

  4. Entity Framework i SQL Server 2012 stronicowanie

  5. Indeksowanie Entity Framework WSZYSTKIE kolumny kluczy obcych