sql >> Databáze >  >> RDS >> Sqlserver

ŘÁDEK VÝBĚRU SQL

To lze snadno provést pomocí row_number() funkce 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

Živý příklad na SQL Fiddle.

Ne že by váš příkladový výstup nesplňoval vaše požadavky. Zahrnuje několik řádků, které neodpovídají žádnému ze tří kritérií (první řádek, poslední řádek, začátek po zastávce.)




  1. Případy použití pro SQL Server Příkaz MERGE:Synchronizace online a tabulek historie

  2. co je @JoinColumn a jak se používá v Hibernate

  3. Jak vygenerovat trasování FRD v Oracle Apps 11i/R12

  4. jak získat velikost záznamu v mysql