0.2、sql 获取表中每一个分组中的第一条数据

文章目录

      • 问题描述
      • 测试表结构
        • 插入一下数据
      • 提出需求
        • 问题解决
        • 拓展-根据id最简单
      • 总结

问题描述

对于 SQL 搜索有一种场景尽管很少遇到,但是不可避免,就是对于数据进行分组,并且获取每一个分组中第一条数据。
本文给出可行的解决方案。

测试表结构

表字段主要是 id、name、type、date

create table test
(
    id   bigint auto_increment
        primary key,
    name varchar(20) not null,
    type int         not null,
    date datetime    null
);

插入一下数据

0.2、sql 获取表中每一个分组中的第一条数据_第1张图片

提出需求

获取 type=1,获取 name 和其对应的最早的 date值

问题解决

group by 之后无法获得差异化数据,所以可以先获取唯一id,然后通过多次套用的方式来解决。
即,根据 name 和 date 做第一次分类,组成临时表。
然后对这个临时表做第二次分类,获取每一类的的第一条数据

select name,min(date) from (
                  select name, date
                  from test
                  where type = 1
                  group by name, date
              )tem
group by name

拓展-根据id最简单

如果我们需要获取整条数据,则可以使用 分组+id

select * from test where id in (
    select min(id)
                  from test
                  where type = 1
                  group by name
    )

总结

group by 支持 对一个字段做分类,然后最另一个字段做条件处理。
只要确保每次处理分类字段+该分类下唯一区分条件字段 即可不断缩小数据范围。如果最后得出的数据是主键值,则可以返回来获取完整数据行的值。

你可能感兴趣的:(Mysql,学习,sql,按组分类)