我在SQL Server 2005中有一个表,如下所示,例如,字段A,B,C,D
如果我有以下数据:
A B C D
1 B1 C1 D1 -
2 B1 C1 D1 -
3 B2 C2 D2 -
4 B2 C2 D2 -
5 B2 C2 D2 -
6 B3 C3 D3 -
我希望能够挑选出唯一的(在B,C和D上),或者,如果不是唯一的(在B,C和D上),那么我只想挑选一行具有A字段中的最大值。所以,我想在上面的场景中返回第2行(A = 2),第5行和第6行。如果可能的话,我不想使用游标,而是设置基于操作。
我是否有办法以存储过程或表函数的方式实现此目的?
提前致谢, 添
答案 0 :(得分:4)
这应该很容易。只需按b, c, d
分组,然后使用MAX
获取a
的最高值。
Select Max(a), b, c, d
From your_table
Group By b, c, d
答案 1 :(得分:2)
假设您可能还有其他列要返回...
with cte as
(
select a,b,c,d,
row_number() over (partition by b,c,d order by a desc) as rn
from yourtable
)
select a,b,c,d
from cte
where rn=1