SQL 分组筛选取标识最大的那一行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 分组筛选取标识最大的那一行相关的知识,希望对你有一定的参考价值。
假设数据表名为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了,所以尽量优化一下算法
假设数据表名为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)
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)本回答被提问者采纳 参考技术B 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好 参考技术C select max(id),name,data from haha group by name,data
sql分组取最大值
SELECT aa.* FROM a_user aa WHERE version = ( SELECT max(version) FROM a_user WHERE type = aa.type ) ORDER BY aa.type desc
以上是关于SQL 分组筛选取标识最大的那一行的主要内容,如果未能解决你的问题,请参考以下文章