问题描述
怎么样:
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重复。
解决方法
这就是我想要做的。假设我有这张桌子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条目都是不同的,但在我的数据中并非如此。使用带有两个条件的子查询和内部联接将为我提供某些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