sql >> Databasteknik >  >> RDS >> Sqlserver

SQL SELECTING ROW

Det görs enkelt med row_number() fönsterfunktion:

; 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-exempel på SQL Fiddle.

Inte för att din exempelutgång inte uppfyller dina krav. Den innehåller flera rader som inte matchar något av de tre kriterierna (första raden, sista raden, start efter stopp.)




  1. Återställer automatiskt inkrementvärde för MySql-databasen med JPA

  2. Hur lagrar man användarens tidszon i mysql?

  3. Hur man skriver en anpassad CrudRepository-metod(@Query) för att filtrera resultatet i mitt fall

  4. Bästa sättet att INFOGA många värden i mysqli?