Sql 从下一个表CTE中获取每个值的下一个值

Sql 从下一个表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 对于表拆分中的每个值,我需要在表行程中找到下一个值

我有下表: 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
对于表拆分中的每个值,我需要在表行程中找到下一个值。我试着用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;