다음 테이블이 있습니다. 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
테이블 분할의 각 값에 대해 테이블 이동에서 다음 값을 찾아야합니다. 그룹별로 다음을 얻기 위해 ROW_NUMBER ()를 사용하여 CTE a로 시도했지만 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 s.*, t.time
from split s outer apply
(select top (1) t.*
from travel t
where t.name = s.name and t.time > s.time
order by t.time asc
) t;
이 경우 apply
는 상관 된 하위 쿼리와 본질적으로 동일한 작업을 수행하므로 이러한 방식으로 구문을 지정할 수도 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다