SQL 分组筛选取标识最大的那一行
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)
(select max(id) id from haha(nolock) group by name)b
on a.id=b.id
效率要比in或者exists好