SQL Server获取具有最大字段值的唯一行或行

时间:2010-08-24 14:38:51

标签: sql-server stored-procedures function duplicates

我在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行。如果可能的话,我不想使用游标,而是设置基于操作。

我是否有办法以存储过程或表函数的方式实现此目的?

提前致谢, 添

2 个答案:

答案 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