Hola ivan89:
hay varios detalles en tus consultas, que supongo que son por desconocimiento de cómo funciona el operador DISTINCT...
La función DISTINCT omite los registros repetidos, el detalle está en que un registro repetido es aquel DONDE TODOS SUS CAMPOS SON EXACTAMENTE IGUALES... cuando haces un
Código:
... DISTINCT usuario FROM ...
la consulta funciona porque SÓLO ESTÁ CONSIDERANDO LA COLUMNA USUARIO...
cuando haces un
Código:
... DISTINCT usuario, comentario, fecha ...
Estás comparando LOS TRES CAMPOS... conque uno solo de ellos SEA DISTINTO, entonces se mostrará en la consulta.
Ahora bien, la idea del GROUP BY no está tan errada, sin embargo DEBES HACER USO DE FUNCIONES DE AGRUPACIÓN (MIN, MAX, COUNT, etc.)... es cuestión de que practiques un poco más.
Ahora si, volviendo al problema original... en realidad este tipo de consultas es de las más comunes en SQL, hay muchos ejemplos en este foro o en la red para resolverlo, y en realidad existen muchas formas para hacerlo... con IN, con EXISTS, con HAVING (como propone Gedeon). Sin embargo una de las maneras más sencillas y desde mi punto de vista la que mejor rendimiento tiene es hacerlo con una subconsulta. veamos el ejemplo, con los datos que tienes en tu tabla:
Código MySQL:
Ver original+------------+---------+---------------------+
| comentario | Usuario | Fecha |
+------------+---------+---------------------+
| comentario | david | 2013-06-05 23:30:00 |
| comentario | jose | 2013-06-05 23:20:00 |
| comentario | david | 2013-06-04 13:30:00 |
| comentario | david | 2013-06-04 13:15:00 |
| comentario | carlos | 2013-06-04 13:10:00 |
| comentario | david | 2013-06-04 12:30:00 |
| comentario | ruben | 2013-06-04 12:00:00 |
+------------+---------+---------------------+
Como te interesa el ÚLTIMO comentario de cada usuario, utilizas la función MAX y la cláusula GROUP BY, así:
Código MySQL:
Ver original+---------+---------------------+
+---------+---------------------+
| carlos | 2013-06-04 13:10:00 |
| david | 2013-06-05 23:30:00 |
| jose | 2013-06-05 23:20:00 |
| ruben | 2013-06-04 12:00:00 |
+---------+---------------------+
Ahora bien, si también necesitas extaer el comentario que corresponde o algún otro dato, de tu tabla, puedes hacer un INNER JOIN para filtrar la información a partir de esta consulta, así:
Código MySQL:
Ver original -> ON T1.usuario
= T2.usuario
AND T1.fecha
= T2.max_fecha
; +------------+---------+---------------------+
| comentario | Usuario | Fecha |
+------------+---------+---------------------+
| comentario | david | 2013-06-05 23:30:00 |
| comentario | jose | 2013-06-05 23:20:00 |
| comentario | carlos | 2013-06-04 13:10:00 |
| comentario | ruben | 2013-06-04 12:00:00 |
+------------+---------+---------------------+
Dale un vistazo y cualquier duda la comentas en el foro y con gusto tratamos de ayudarte.
Saludos
Leo.