如何简单获取聚合中的其他列

Lansie 2013-07-19 05:44:42
表 t
id name score
1 a 50
2 a 60
3 b 40
4 a 60
5 a 30

目标是按name聚合,取到id最大值的score
只能这么写吗?
select name,score from t
where id in (select max(id) from t group by name)
我记得sql server有新特性支持一种简单写法的?有吗?
谢谢!
...全文
190 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小孩快跑 2013-07-29
  • 打赏
  • 举报
回复
select * from (SELECT Row_Number() OVER(partition BY name ORDER BY score DESC) ROWID,* FROM tbl)A where ROWID=1
雪狐 2013-07-26
  • 打赏
  • 举报
回复
是不是2005?如果是用Row_Number Partition BY
smile_ps 2013-07-19
  • 打赏
  • 举报
回复
取最大id的score 我知道就只有你贴出来的那种写发,这个请教大神吧。我旁听学习。
Lansie 2013-07-19
  • 打赏
  • 举报
回复
是要这个效果 id name score 3 b 40 5 a 30
smile_ps 2013-07-19
  • 打赏
  • 举报
回复
是不是想达到这样的效果?

SELECT * FROM #Tmp_A
 WHERE ID In (
SELECT MAX(ID)AS ID FROM #Tmp_A A
  LEFT OUTER JOIN (
SELECT [NAME],MAX(score) AS score
  FROM #Tmp_A
 GROUP BY [name]) B
	ON A.[NAME] = B.[NAME] 
 WHERE A.score = B.score
 GROUP BY A.[NAME])

id          name       score
----------- ---------- -----------
3           b          40
4           a          60

(2 行受影响)
Lansie 2013-07-19
  • 打赏
  • 举报
回复
原意就不是取score的最大值,是取最大id的score
smile_ps 2013-07-19
  • 打赏
  • 举报
回复
你这样取不到score的最大值吧?

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧