SQL 分组筛选取标识最大的那一行

假设数据表名为haha,内容如下idnamedata1ABC22ABC33ABC51DEF32DEF4只允许使用查询,不能使用创建表的语句,结果中name列的值具有唯一性... 假设数据表名为haha,内容如下
id name data
1 ABC 2
2 ABC 3
3 ABC 5
1 DEF 3
2 DEF 4

只允许使用查询,不能使用创建表的语句,结果中name列的值具有唯一性且包含原表中该列所有的值,如果有重复的,只取对应id列的值为最大的
查询结果为
id name data
3 ABC 5
2 DEF 4

以上只是假设,实际数据表大小超过600MB
实际有很多列,要求结果只取上面三列,所以不能用select * from

刚查了一下实际该表的大小,超过1GB了,所以尽量优化一下算法
展开
 我来答
JM埃媚
2018-03-31 · TA获得超过3447个赞
知道小有建树答主
回答量:45
采纳率:0%
帮助的人:6883
展开全部
  • 假设数据表名为haha,内容如下
    id   name  data
    1    ABC      2
    2    ABC      3
    3    ABC      5
    1    DEF      3
    2    DEF      4

    只允许使用查询,不能使用创建表的语句,结果中name列的值具有唯一性且包含原表中该列所有的值,如果有重复的,只取对应id列的值为最大的。

  • 查询结果为
    id name data
    3 ABC 5
    2 DEF 4

    以上只是假设,实际数据表大小超过600MB

SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名

可以参考如下写法:

select id,name,data from haha  a where id= (select max(id) from haha b where a.name = b.name)

select id,name,data from haha a where not exists(select 1 from haha b where a.name = b.name and a.id < b.id)

baiynijecym
2012-08-10 · TA获得超过1841个赞
知道大有可为答主
回答量:1411
采纳率:66%
帮助的人:1170万
展开全部
可以参考如下写法

select id,name,data from haha a where id= (select max(id) from haha b where a.name = b.name)

select id,name,data from haha a where not exists(select 1 from haha b where a.name = b.name and a.id < b.id)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2012-08-10 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5168万
展开全部
select a.* from haha a(nolock) inner join
(select max(id) id from haha(nolock) group by name)b
on a.id=b.id
效率要比in或者exists好
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勤苦又乐观丶饼干9473
2012-08-10
知道答主
回答量:25
采纳率:0%
帮助的人:17.9万
展开全部
select max(id),name,data from haha group by name,data
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式