SQL Server получает уникальные строки или строки с наибольшим значением поля - PullRequest
2 голосов
/ 24 августа 2010

У меня есть таблица в 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), то я хотел бы выбрать только строку с наибольшим значением в поле А. Итак, я хотел бы вернуть строку 2 (A = 2), строку 5 и строку 6 в приведенном выше сценарии. Я не хотел бы использовать курсоры, если это возможно, но установить операции на основе.

Есть ли способ, которым я могу это сделать, таким образом, чтобы я мог использовать его в хранимой процедуре или табличной функции?

Спасибо заранее, Тим

Ответы [ 2 ]

4 голосов
/ 24 августа 2010

Это должно быть легко.Просто сгруппируйте по b, c, d и используйте MAX, чтобы получить наибольшее значение для a.

Select Max(a), b, c, d
From your_table
Group By b, c, d
2 голосов
/ 24 августа 2010

Предполагая, что у вас вполне могут быть дополнительные столбцы для возврата ...

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...