sql 多条数据记录取最大值

ycwww 2017-12-09 12:19:36
数据结构如下:

table

ID Uname Price BuyDate
1 张三 180 2017-12-1
2 张三 280 2017-12-7
3 李四 480 2017-12-10
4 李四 280 2017-12-11
5 王武 280 2017-12-1
6 王武 880 2017-12-11
7 王武 380 2017-12-15

要求得到结果为 (取所有记录的price中的最大值,唯一一条数据列出):

ID Uname Price BuyDate
2 张三 280 2017-12-7
3 李四 480 2017-12-10
6 王武 880 2017-12-11

...全文
1169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2017-12-09
  • 打赏
  • 举报
回复

select * 
from table A
where not exists (select 1 from table where Uname=A.Uname and Price>A.Price) 
中国风 2017-12-09
  • 打赏
  • 举报
回复
在另一贴已回复 顺序加上,Uname分组,取最大Price,最大BuyDate,最大ID 优先取
SELECT * FROM (SELECT *,ROW_NUMBER()OVER(PARTITION BY Uname ORDER BY Price DESC,BuyDate DESC,ID DESC) AS RN FROM tabName ) AS T WHERE RN=1
其它方法可参照 http://bbs.csdn.net/topics/240034273
吉普赛的歌 2017-12-09
  • 打赏
  • 举报
回复
row_number 最容易理解
二月十六 2017-12-09
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[Uname] nvarchar(22),[Price] int,[BuyDate] Date)
Insert #T
select 1,N'张三',180,'2017-12-1' union all
select 2,N'张三',280,'2017-12-7' union all
select 3,N'李四',480,'2017-12-10' union all
select 4,N'李四',280,'2017-12-11' union all
select 5,N'王武',280,'2017-12-1' union all
select 6,N'王武',880,'2017-12-11' union all
select 7,N'王武',380,'2017-12-15'
Go
--测试数据结束
SELECT ID ,
Uname ,
Price ,
BuyDate
FROM ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY Uname ORDER BY Price DESC ) AS num
FROM #T
) t
WHERE num = 1


22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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