SQL选择行
可能重复: 如果我有下表SQL选择行,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,可能重复: 如果我有下表 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
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
我希望输出只采取每次第一次启动和每次启动后
车站和最近一站
使用“行数”窗口函数可以轻松实现这一点:
; 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
并不是说您的示例输出不满足您的需求。它包括多个不符合以下三个条件的行:第一行、最后一行、停止后开始。名称id和值为start/stop的列?时间是什么类型的?没有帮到你吗?@Tim Schmelter,时间是时间/日期类型,看起来像,但有了topI上的输出,我将投票以与我相同的理由重新开放。在OP决定他们想要不同格式的输出之前,前一个已经收集了几个答案。编辑上一个问题将基本上没有当时发布的答案。很抱歉我的错误,请再次查看我的帖子