TSQL:获取一列具有列的最大值

时间:2016-05-20 19:50:47

标签: sql sql-server tsql

我有一个包含2列(id,name)的表,其中包含以下值:

id    name
---   ---
 1    John
 2    John 
 3    Mary
 4    Mary

对于在' name'中重复的值,我只想选择那些在' id'中具有最大价值的行。所以我想要的输出是:

id    name
---   ---
 2    John
 4    Mary

我尝试按照此链接中的说明操作:Fetch the row which has the Max value for a column但无法使其正常工作。

这是我使用的查询:

select 
    name, id 
from
    (select 
         name, max(id) over (partition by name) max_ID 
     from sometable) 
where 
    id = max_ID

但是我收到了这个错误:

  

关键字'其中'。

附近的语法不正确

任何想法我做错了什么?

3 个答案:

答案 0 :(得分:4)

如果您对子查询进行别名,则可以避免语法错误...尝试在右括号后添加“AS MyTable”

select name, id 
FROM ( select name, max(id) over (partition by name) max_ID from sometable ) AS MyTable 
where id = max_ID

但这可能更简单:

SELECT name, MAX(id) FROM tablename GROUP BY name

答案 1 :(得分:1)

您的子查询没有强制别名

.. 
FROM ( select name, max(id) over (partition by name) max_ID from sometable )  t -- alias missing 
..

答案 2 :(得分:1)

您正在使用聚合函数的别名,这是错误的。

使用你可以选择多行的名称

 select * from my_table where id in (  
 select max(id) from my_table where name in 
 (
   select   name
   from  my_table 
   having count(*) >1 
   group by name )) ;