Я думаю, вы можете сделать так:
declare @table table (owner nvarchar(50),row_no int)
insert into @table
values
('A', 1),
('B', 1),
('B', 2),
('C', 1),
('C', 2),
('C', 3),
('C', 4)
select owner,row_no from (
select *, ROW_NUMBER() over(partition by owner order by la desc) as rn from (
select *,LEAD(row_no,1,1) over(partition by owner order by row_no) as la from @table
)X
)z where rn = 1
ИЗМЕНИТЬ ОБНОВЛЕНИЕ
С CategoryList вы можете сделать это
declare @table table (owner nvarchar(50),row_no int,category nvarchar(50))
insert into @table
values
('A', 1,'U'),
('B', 1,'T'),
('B', 2,'T'),
('C', 1,'U'),
('C', 2,'T'),
('C', 3,'U'),
('C', 4,'U')
;
with category as (
select owner, categoryList = stuff((select N', ' + Category
from (Select distinct owner,category from @table t2
) z
where z.owner = t1.owner
FOR XML PATH(N''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
from @table t1
group by owner
)
select z.owner,row_no,y.categoryList from (
select *, ROW_NUMBER() over(partition by owner order by la desc) as rn from (
select *,LEAD(row_no,1,1) over(partition by owner order by row_no) as la from @table
)X
)z
inner join category y on z.owner = y.owner
where rn = 1
DBFiddeldemo