如果我有
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
答案 0 :(得分:0)
只需使用MAX
和GROUP BY
:
SELECT MAX(id) AS id, txt FROM @t GROUP BY txt;
这将根据txt
列进行分组,并为每个列获取最大的id
。
结果:
id txt
----------- ----
2 a
4 b