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)

参考技术A 可以参考如下写法

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 分组筛选取标识最大的那一行的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询取分组最大值

mysql 分组总和求最大值 的两种方式

Sqlserver 中 如何筛选出 分组后成绩最大列的这一列

如何显示mysql分组中时间最大的一行记录

SQL查询取分组最大值

sql 怎么分组取行数最大的一条