SQL排名功能。基于排名结果的过滤器,无需包装器SELECT

时间:2018-11-07 16:43:29

标签: sql-server sql-server-2012

如果我有

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 :(得分:0)

只需使用MAXGROUP BY

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

这将根据txt列进行分组,并为每个列获取最大的id

结果:

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