按一个字段中的最小值分组,同时选择不同的行 [英] Group by minimum value in one field while selecting distinct rows

查看:24
本文介绍了按一个字段中的最小值分组,同时选择不同的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我想要做的。假设我有这个表t:

key_id | id | record_date | other_cols
1      | 18 | 2011-04-03  | x
2      | 18 | 2012-05-19  | y
3      | 18 | 2012-08-09  | z
4      | 19 | 2009-06-01  | a
5      | 19 | 2011-04-03  | b
6      | 19 | 2011-10-25  | c
7      | 19 | 2012-08-09  | d
对于每个id,我希望选择包含最小RECORD_DATE的行。所以我会得到:

key_id | id | record_date | other_cols
1      | 18 | 2011-04-03  | x
4      | 19 | 2009-06-01  | a
我看到的解决此问题的唯一解决方案是假设所有RECORD_DATE条目都是不同的,但在我的数据中并非如此。使用子查询和带有两个条件的INTER JOIN将为某些ID提供重复的行,这是我不想要的:

key_id | id | record_date | other_cols
1      | 18 | 2011-04-03  | x
5      | 19 | 2011-04-03  | b
4      | 19 | 2009-06-01  | a

推荐答案

不如这样:

SELECT mt.*     
FROM MyTable mt INNER JOIN
    (
        SELECT id, MIN(record_date) AS MinDate
        FROM MyTable
        GROUP BY id
    ) t ON mt.id = t.id AND mt.record_date = t.MinDate

这将获取每个ID的最小日期,然后根据这些值获取值。只有在同一ID存在重复的最小RECORD_DATES时,您才会有重复项。

这篇关于按一个字段中的最小值分组,同时选择不同的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆