Consultas MySQL

Hola,
A ver si tú sabes hacer esta consulta de una forma sencilla en MySQL. Quiero averiguar el registro de una tabla que cumpla las siguientes condiciones:
- Que la categoría a la que pertenece sea una concreta, por ejemplo 'Economía'.
- Que dentro de esa categoría, sea el último registro insertado, basándose en la fecha (campo "fechahora_alta")
Y quiero extraer algunos campos del registro resultante, como por ejemplo, el campo "titulo".
He probado con funciones de subtotalización, concretamente con la función MAX(), pero no logro extraer simultáneamente la fecha máxima y el titulo del registro:
SELECT titulo, categoria, MAX(fechahora_alta) AS fhalta FROM recursos WHERE categoria='Economía' GROUP BY categoria;
SELECT r2.id, MAX(recursos.fechahora_alta) AS fhalta FROM recursos, recursos AS r2 WHERE r2.fechahora_alta = fhalta AND categoria='Economía' GROUP BY categoria;
Esta es una tabla recursos de ejemplo con el filtro de categoría ya pasado
+----------------------------------------------------------+-----------+---------------------+
| titulo | categoria | fechahora_alta |
+----------------------------------------------------------+-----------+---------------------+
| Falsas ofertas de empleo tras líneas 906 | Economia | 2001-08-12 13:08:12 |
| Hacienda abre una investigación interna sobre Gescartera | Economía | 2001-08-12 12:35:01 |
+----------------------------------------------------------+-----------+---------------------+
Este es el resultado que me gustaría obtener, pero que no logro. ¿Me das alguna pista?
Gracias

1 Respuesta

Respuesta
1
Las funciones de agrupación tipo MAX() no puedes mezclarlas con valores sencillos de campos, salvo que agrupes precisamente por dichos campos. En el ejemplo que me dices:
SELECT titulo, categoria, MAX(fechahora_alta) AS fhalta FROM recursos WHERE categoria='Economía' GROUP BY categoria;
El campo titulo representa un error, porque lo que pueda devolver está totalmente fuera de control. Puede ser cualquier valor. No el que esperas.
SELECT titulo, categoria, MAX(fechahora_alta) AS fhalta FROM recursos WHERE categoria='Economía' GROUP BY titulo, categoria;
Esta query tendría más sentido, pero tampoco te sirve.
La solución a lo que buscas creo que puede ser esta query:
SELECT titulo, categoria, fechahora_alta FROM recursos WHERE categoria='Economía' ORDER BY fechahora_alta DESC LIMIT 0,1;
LIMIT sirve para quedarse con un número de registros determinados de los obtenidos con las condiciones previas. Así, LIMIT 0,1 se queda con los primeros 1 registros a partir del 0, o sea, que se quedará con el primero. Al haber ordenado por fecha en orden inverso, siempre obtendrás el registro con mayor fecha, dentro de la selección de categoría.
2 URLs que te pueden venir bien:
http://www.mysql.com/Manual_chapter/manual_toc.html
http://www.bitbybit.dk/mysqlfaq/faq.html

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas