-4

重複の可能性:
SQL SERVER SELECTING ROW

この表が下にある場合

   id         time
   start      08.00 AM 
   stop       09.00 AM
   stop       09.30 AM
   start      09.30 AM
   start      11.00 AM
   start      11.30 AM
   stop       11.30 AM
   stop       12.00 PM

以下の出力のような出力が必要です。

解決策はありますか?

これは私が望む出力です:

    id         time       end_time    interval 
   start      08.00 AM    09.00 AM      60 minute
   stop       09.00 AM    09.30 AM      30 minute
   start      09.30 AM    11.30 AM      120 minute
   stop       11.30 AM    12.00 PM      30 minute
   stop       12.00 PM     NULL          NULL
4

1 に答える 1

0

すべての最初の開始と停止後のすべての開始、および最後の停止のみを取る出力が必要です

row_number()これは、ウィンドウ関数を使用して簡単に実行できます。

; 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

SQL Fiddle での実例。

出力例が要件を満たしていないわけではありません。3 つの基準 (最初の行、最後の行、最初から最後まで) のいずれにも一致しない行がいくつか含まれています。

于 2013-01-29T12:02:43.217 に答える