我有一个包含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
但是我收到了这个错误:
关键字'其中'。
附近的语法不正确
任何想法我做错了什么?
答案 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 )) ;