Единственная логика, которую я вижу, это использовать Id
из вашей таблицы и сделать что-то подобное.Используя CTE
, вы найдете идентификаторы MIN
и MAX
для каждого запроса, то есть из города в город.И после этого вы присоединяете свою таблицу к CTE, чтобы найти фактические значения.
declare @tbl as table
([Id] int, [FromCity] varchar(9), [ToCity] varchar(9), [Date Created] datetime, [RequestId] int)
;
INSERT INTO @tbl
([Id], [FromCity], [ToCity], [Date Created], [RequestId])
VALUES
(1, 'Mysore', 'Atlanta', '2018-10-05 15:10:00', 12),
(2, 'Atlanta', 'Singapore', '2018-10-06 15:10:00', 12),
(3, 'Singapore', 'Pakistan', '2018-10-07 15:10:00', 12),
(4, 'Pakistan', 'Myscot', '2018-10-07 15:10:00', 12),
(5, 'UK', 'Atlanta', '2018-10-06 15:10:00', 13),
(6, 'Atlanta', 'Singapore', '2018-10-06 15:10:00', 13),
(7, 'Singapore', 'Italy', '2018-10-23 15:10:00', 13);
;with cte as (
select
MIN(Id) as [start]
,MAX(Id) as [end]
,RequestId
from @tbl
group by requestID
)
select
t1.FromCity
,t1.[Date Created]
,t2.ToCity
,t2.[Date Created]
from cte
inner join @tbl t1
on t1.Id = cte.[start]
and t1.RequestId = cte.RequestId
inner join @tbl t2
on t2.Id = cte.[end]
and t2.RequestId = cte.RequestId
Обновление: на основе комментария @Panagiotis Kanavos вы можете упростить запрос следующим образом
;with cte as (
select
MIN(Id) as [start]
,MAX(Id) as [end]
from @tbl
where RequestId = 12 ---> here you can use a variable containing the requestID
)
select
t1.FromCity
--,t1.[Date Created]
,t2.ToCity
--,t2.[Date Created]
from cte
inner join @tbl t1
on t1.Id = cte.[start]
inner join @tbl t2
on t2.Id = cte.[end]