id | nro_colectivo | fecha | chofer |
---|---|---|---|
1 | 800 | 2012-08-19 | Pablo |
2 | 801 | 2012-08-19 | Juan |
3 | 802 | 2012-08-20 | Mariano |
4 | 802 | 2012-08-21 | Pablo |
5 | 800 | 2012-08-21 | Daniel |
Y necesitaba obtener el ultimo registro de cada colectivo. Osea:
id | nro_colectivo | fecha | chofer |
---|---|---|---|
2 | 801 | 2012-08-19 | Juan |
4 | 802 | 2012-08-21 | Pablo |
5 | 800 | 2012-08-21 | Daniel |
Si hacemos la siguiente consulta:
SELECT * FROM tabla GROUP BY nro_colectivo
este sería el resultado:
id | nro_colectivo | fecha | chofer |
---|---|---|---|
1 | 800 | 2012-08-19 | Pablo |
2 | 801 | 2012-08-19 | Juan |
3 | 802 | 2012-08-20 | Mariano |
Como se puede ver lo que devolvió fue el primer registro de cada uno. Si agregáramos un ORDER BY id DESC obtendríamos las mismas filas solo que ordenadas de mayor a menor, Osea 3, 2, 1.
Para obtener el resultado deseado hay que hacer la consulta de la siguiente manera:
SELECT * FROM ( SELECT * FROM tabla ORDER BY id DESC )sub GROUP BY nro_colectivo
Lo que estoy haciendo es una consulta anidada. Osea hago una consulta que me traiga toda la tabla, pero ordenada en forma descendente, le doy un nombre, 'sub' en este caso, y a esta le hago una segunda consulta pidiendo que me agrupe los datos por el numero de colectivo.
Espero que les sirva.