Функция ранжирования SQL. Фильтр по результату ранжирования без оболочки SELECT - PullRequest
0 голосов
/ 07 ноября 2018

Если у меня есть:

1, 'a'
2, 'a'
3, 'b'
4, 'b'

И я хочу выбрать строки каждой «буквы», которые будет генерировать самый высокий «id»:

2, 'a'
4, 'b'

Я могу сделать это, как показано ниже.

Но возможно ли это сделать без необходимости оборачивать дополнительный SELECT вокруг всего этого?

declare @t table (id int, txt varchar)

insert into @t (id, txt)
select 1, 'a' union
select 2, 'a' union
select 3, 'b' union
select 4, 'b'

select * from (
    select *, row_number() over (partition by txt order by id desc) as row_num
    from @t
) z
where row_num = 1

1 Ответ

0 голосов
/ 07 ноября 2018

Просто используйте MAX и GROUP BY:

SELECT MAX(id) AS id, txt FROM @t GROUP BY txt;

Группирует по столбцу txt и получает максимум id для каждого из них.

Результаты:

id          txt
----------- ----
2           a
4           b
...