2011-01-14 12 views
5

tabla: uuid, versión, fecha y horaMySQL - Grupo por la Orden por DESC

versión no es único, pero la idea es ir a buscar sólo las filas con la última fecha y hora para un UUID dado

SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc

... por supuesto obtiene resultados asc de fecha y hora - ¿hay alguna manera de "preordenar" el grupo por desc, para que solo se obtenga la última versión?

Respuesta

21

ya que la tabla sólo tiene los 3 campo, y que está filtrando por UID que sólo puede usar el MAX sin el JOIN:

SELECT version, MAX(datetime) Maxdatetime 
FROM table 
WHERE uuid='bla' 
GROUP BY version 

Sin embargo, si la tabla tiene más campos, o que no están filtrando por uid - que necesita para obtener la primera fecha y hora para cada versión MAX, a continuación, seleccione la fila:

SELECT t.uuid, t.version, t.datetime 
FROM table t JOIN (
    SELECT version, MAX(datetime) Maxdatetime 
    FROM table 
    WHERE uuid='bla' 
    GROUP BY version 
) r ON t.version = r.version AND t.datetime = r.Maxdatetime 
WHERE t.uuid='bla' 
ORDER BY t.datetime desc 
+0

Exactamente lo que necesitaba con ligeras modificaciones - ¡Gracias! – mmrtnt

+0

¿Es necesario repetir la cláusula WHERE dos veces? – ina

+0

@ina, sí por motivos de rendimiento. –

4
SELECT * FROM 
(SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table 
GROUP BY version; 
2

Hay una mejor manera para mí, se podría añadir un desc para agrupar por:

SELECT * FROM tabla WHERE = UUID 'bla' GROUP BY versión desc

por qué funciona es porque se generan mis de identificación y así siempre la última Identificación significa la última fecha y hora

+1

por qué nadie ve esto ... es trabajo y consulta simple: D – haidarvm

+0

Agradable, pero solo funciona si 'datetime' se insertó en orden (ordenado) –