如何用嵌套SELECT语句去重,获取每位用户最新日期所属用户组
问题原因分析
你写的SQL无法得到预期结果的核心原因是分组规则错误:你按Name和Group两个字段分组,相当于同一个用户的不同Group归属记录被拆成了独立的分组,每个分组都会计算自身的最大日期,最终自然会返回所有Group对应的记录。
嵌套SELECT实现方案
通过子查询先拿到每个用户的最新日期,再关联原表匹配对应Group即可,写法如下:
SELECT t.ID, t.Name, t.`Group`, t.Date FROM table_d t INNER JOIN ( -- 内层查询:按用户唯一ID分组,取每个用户的最新日期 SELECT ID, MAX(Date) AS latest_date FROM table_d -- 保留原有的日期过滤条件,不需要统计2021年前的数据可保留,否则删除即可 WHERE Date >= '20210101' GROUP BY ID ) t_latest ON t.ID = t_latest.ID AND t.Date = t_latest.latest_date ORDER BY t.Name;
逻辑说明
- 内层嵌套查询仅以用户唯一标识
ID作为分组维度,计算得到每个用户的最新日期 - 外层查询将原表和内层查询结果做关联,匹配到对应用户、且日期等于最新日期的记录,就能得到该用户最新归属的Group信息
- 注意
Group是SQL保留关键字,查询时需要用反引号包裹避免语法报错
内容的提问来源于stack exchange,提问作者DeAnna
相关产品推荐
相关产品推荐

