Agrupe por valor mínimo en un campo mientras selecciona filas distintas
Esto es lo que estoy tratando de hacer. Digamos que tengo esta tabla 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
Para cada identificación, quiero seleccionar la fila que contiene la fecha de registro mínima. Entonces obtendría:
key_id | id | record_date | other_cols
1 | 18 | 2011-04-03 | x
4 | 19 | 2009-06-01 | a
Las únicas soluciones que he visto a este problema suponen que todas las entradas de record_date son distintas, pero ese no es el caso en mis datos. Usar una subconsulta y una combinación interna con dos condiciones me daría filas duplicadas para algunos identificadores, lo cual no quiero:
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
¿Qué tal algo como:
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
Esto obtiene la fecha mínima por ID y luego obtiene los valores basados en esos valores. El único momento en el que tendría duplicados es si hay fechas de registro mínimas duplicadas para el mismo ID.
Podría llegar al resultado esperado simplemente haciendo esto enMySQL:
SELECT id, min(record_date), other_cols
FROM mytable
GROUP BY id
¿Esto funciona para tí?