2011-06-28 9 views
6

¿Existe una forma eficiente de hacer un pedido por y agrupar para que obtenga un artículo específico de cada grupo (del pedido por).Hacer un pedido por grupo por

//This is the best way i have come up with. 
SELECT D.* 
FROM (
    SELECT * 
    FROM devices 
    ORDER BY time 
) AS D 
GROUP BY D.location 
+0

esto es más eficiente que 'select * del grupo de dispositivos por location'? – Jaydee

+0

Aquí está el problema. Digamos que tiene una mesa que contiene muchos informes. Cada ubicación puede tener informes X. Pero solo quieres el último informe. Para lograr esto el 100% del tiempo, debe ordenar por tiempo ENTONCES grupo por. – Michael

+0

Sospecho que es posible que esté malinterpretando el funcionamiento de GROUP BY. Ver este artículo (disculpas si esto es una noticia vieja) http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html – Jaydee

Respuesta

1
SELECT * 
FROM devices 
GROUP BY D.location 
ORDER BY time --ASC or DESC default is ASC i believe 

No hay necesidad de sub-consultas

+0

Que los errores. No puedes hacer una orden por declaración ante un grupo con una declaración como esa. y sí, ASC está predeterminado porque es el "Pedido natural", como si, si te pidiera que veas si tuviera 100 elementos, probablemente comiences en 1 y pases a 100 en lugar de comenzar en 100 y contar hacia abajo. – Michael

+0

@Michael, lo cambié – Neal

+0

¿Esto realiza primero el ORDER BY o GROUP BY? – Michael

2

Esto funcionó para mí

SELECT * 
FROM (SELECT * 
     FROM col 
     ORDER BY col DESC,date DESC)a 
GROUP BY col 
+0

Desafortunadamente ha pasado tanto tiempo desde que miré esto que no recuerdo! :) ¡Pero gracias por la respuesta! – Michael

+0

LOL :) ... Lo sé, pero alguien más podría tropezar con el mismo problema y no hace daño publicar una segunda solución;) –