Hola compañeros:
La solución no es tan trivial como propone el compañero gnzsoloyo... si entendí correctamente con sólo ORDER BY no se puede obtener el resultado que quiere diegohugogallego:
Si ordenas por comentarista y fecha obtienes
Código MySQL:
Ver originalmysql
> SELECT usuario
, comentarista
, fecha
-> WHERE usuario
= 'fran' +---------+--------------+-------+
| usuario | comentarista | fecha |
+---------+--------------+-------+
| fran | angel | 2011 |
| fran | angel | 1999 |
| fran | helen | 2000 |
| fran | laura | 2012 |
| fran | laura | 2010 |
+---------+--------------+-------+
El problema es que el primer registro
NO CORRESPONDE A LA FECHA MÁXIMA.
Si ordenas primero por fecha y comentarista obtienes:
Código MySQL:
Ver originalmysql
> SELECT usuario
, comentarista
, fecha
-> WHERE usuario
= 'fran' +---------+--------------+-------+
| usuario | comentarista | fecha |
+---------+--------------+-------+
| fran | laura | 2012 |
| fran | angel | 2011 |
| fran | laura | 2010 |
| fran | helen | 2000 |
| fran | angel | 1999 |
+---------+--------------+-------+
El problema es que los registros
NO QUEDAN AGRUPADOS POR COMENTARISTA.
La solución que encontré no es del todo sencilla, pero creo que puede funcionar.
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
mysql
> SELECT T2.usuario
, t2.comentarista
, t2.fecha
FROM -> (
-> SELECT MAX(fecha
) fecha
, usuario
, comentarista
, -> @num
:= @num
+ 1 AS row_number
-> WHERE usuario
= 'fran' -> (
-> SELECT usuario
, o.comentarista
, o.fecha
, -> WHERE i.comentarista
= o.comentarista
AND i.usuario
= o.usuario
) -> ) AS row_number_2
FROM tabla o
-> WHERE usuario
= 'fran' -> ORDER BY comentarista
, row_number_2
) T2
-> ON T1.usuario
= T2.usuario
AND T1.comentarista
= T2.comentarista
-> ORDER BY T1.row_number
, T2.row_number_2
; +---------+--------------+-------+
| usuario | comentarista | fecha |
+---------+--------------+-------+
| fran | laura | 2012 |
| fran | laura | 2010 |
| fran | angel | 2011 |
| fran | angel | 1999 |
| fran | helen | 2000 |
+---------+--------------+-------+
La consulta se conforma de dos subconsultas, la primera para determinar el orden en que deben presentarse los comentarista DE ACUERDO AL MÁXIMO AÑO QUE TENGAN ASIGNADO, es decir, algo como esto:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
mysql
> SELECT MAX(fecha
) fecha
, usuario
, comentarista
, -> @num
:= @num
+ 1 AS row_number
-> WHERE usuario
= 'fran' +-------+---------+--------------+------------+
| fecha | usuario | comentarista | row_number |
+-------+---------+--------------+------------+
| 2012 | fran | laura | 1 |
| 2011 | fran | angel | 2 |
| 2000 | fran | helen | 3 |
+-------+---------+--------------+------------+
La segunda parte es para determinar el orden en que deben presentarse los registros para cada comentarista DE ACUERDO A LA FECHA, es decir:
Código MySQL:
Ver originalmysql
> SELECT usuario
, o.comentarista
, o.fecha
, -> WHERE i.comentarista
= o.comentarista
AND i.usuario
= o.usuario
) -> ) AS row_number_2
FROM tabla o
-> WHERE usuario
= 'fran' +---------+--------------+-------+--------------+
| usuario | comentarista | fecha | row_number_2 |
+---------+--------------+-------+--------------+
| fran | angel | 2011 | 1 |
| fran | angel | 1999 | 2 |
| fran | helen | 2000 | 1 |
| fran | laura | 2012 | 1 |
| fran | laura | 2010 | 2 |
+---------+--------------+-------+--------------+
Finalmente haces la unión de ambas partes y ordenas por los campos row_number que obtuviste en casa subconsulta.
Igual y no es la forma más óptima de hacer la consulta, si encuentro alguna otra forma más fácil de hacerlo la posteo.
Saludos y espero que te sirva el código.
Leo