选择每个组(包括其他列)的最大值

时间:2018-09-24 10:16:56

标签: sql sql-server greatest-n-per-group

Select max value of each group

在提到的问题中,有一个解决方案可以获取每个组的最大值。我需要更多帮助,我希望每个组的最大值以及该最大值的另一列(有问题的第三列)。桌子看起来像这样

Name  Value AnotherColumn
Pump1 1000   1
Pump1 2000   2
Pump2 1000   2
Pump2 2000   1

输出应为

Name  Value AnotherColumn
Pump1 2000    2
Pump2 2000    1

我正在使用Microsoft Sql Server2012。另一列可以是任何类型,它不限于整数,我只想获取另一列以获取每个组的最大值。

4 个答案:

答案 0 :(得分:1)

使用row_number()函数:

select * from 
(select *, row_number() over (partition by name order by value desc) as rn)a
where rn=1

答案 1 :(得分:1)

一个选项使用ROW_NUMBER

SELECT Name, Value, AnotherColumn
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Value DESC) rn
    FROM yourTable
) t
WHERE rn = 1

请注意,如果您希望每个名称的所有联系都具有最大价值,则可以将ROW_NUMBER替换为RANK(或者也许是DENSE_RANK),以获取所有联系。

答案 2 :(得分:0)

只需使用group bymax()

select name ,max(value), max(AnotherColumn) 
from t group by Name

您可以使用相关的子查询

 select * from t t1
   where t1.value in (select max(t2.value) from t t2 where t1.name=t2.name)

答案 3 :(得分:0)

您可以尝试在where中使用子查询来进行创建。

SELECT * 
FROM T t1
WHERE Value = (
    SELECT MAX(Value) 
    FROM T tt
    WHERE tt.Name  = t1.Name  
)
相关问题