sql >> Database >  >> RDS >> Sqlserver

SQL SELECTEER RIJ

Dat is eenvoudig te doen met de row_number() vensterfunctie:

; 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

Live voorbeeld op SQL Fiddle.

Niet dat uw voorbeelduitvoer niet aan uw eisen voldoet. Het bevat verschillende rijen die aan geen van de drie criteria voldoen (eerste rij, laatste rij, start na stop).




  1. Verschillende manieren om de gebruikers van MySQL te vullen

  2. Ouder-kindrelatie binnen één tabel

  3. SQL - Operand-gegevenstype datetime2 is ongeldig voor de operator voor aftrekken

  4. Hoe u alle tabellen in Oracle kunt weergeven