按一个字段中的最小值分组,同时选择不同的行 [英] Group by minimum value in one field while selecting distinct rows
本文介绍了按一个字段中的最小值分组,同时选择不同的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我想要做的。假设我有这个表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屋!
查看全文