Sql 从下一个表CTE中获取每个值的下一个值
我有下表: dbo.splitSql 从下一个表CTE中获取每个值的下一个值,sql,sql-server-2014,Sql,Sql Server 2014,我有下表: dbo.split Name Time Alex 120 John 80 John 300 Mary 500 Bob 900 然后是另一个表dbo.travel Name Time Alex 150 Alex 160 Alex 170 John 90 John 100 John 310 Mary 550 Mary 600 Mary 499 Bob 800 Bob 700 对于表拆分中的每个值,我需要在表行程中找到下一个值
Name Time
Alex 120
John 80
John 300
Mary 500
Bob 900
然后是另一个表dbo.travel
Name Time
Alex 150
Alex 160
Alex 170
John 90
John 100
John 310
Mary 550
Mary 600
Mary 499
Bob 800
Bob 700
对于表拆分中的每个值,我需要在表行程中找到下一个值。我试着用CTE a和ROW_NUMBER来按组获取下一个,但我无法按正确的值进行分组,因为dbo.split不能为同一个名称包含多个值
我正在寻找以下输出:
Name Time TravelTime
Alex 120 150
John 80 90
John 300 310
Mary 500 550
Bob 900 NULL
以下是我到目前为止所做的,但它失败了,因为拆分表每人可以有多条记录:
;with result as (
select t.*,
ROW_NUMBER() OVER (Partition BY t.Name order by t.Time) as rn
from travel t join split s
on t.Name = s.Name and t.TIME>s.Time
)
我会使用以下方法:
在本例中,apply所做的工作与相关子查询基本相同,因此您也可以用这种方式表达它。您可以尝试如下操作
Select * from(Select
Name,t.time,t1.time,
Row_number() over (partition by
Name,t.time order by t1.time) rn
from split t
Join travel t1 on t.time <t1.time and
t.name =t1.name)
where
rn=1;
真是天才。非常感谢,请始终忘记外部应用,以循环模式思考:
Select * from(Select
Name,t.time,t1.time,
Row_number() over (partition by
Name,t.time order by t1.time) rn
from split t
Join travel t1 on t.time <t1.time and
t.name =t1.name)
where
rn=1;