可能重复:
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
答案 0 :(得分: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
并非您的示例输出不符合您的要求。它包括几个不符合三个条件的行(第一行,最后一行,停止后开始。)