Agrupe por valor mínimo en un campo mientras selecciona filas distintas

Resuelto user2765924 asked hace 11 años • 10 respuestas

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
user2765924 avatar Sep 11 '13 00:09 user2765924
Aceptado

¿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.

Adriaan Stander avatar Sep 10 '2013 17:09 Adriaan Stander

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í?

Math avatar Sep 10 '2013 17:09 Math