SQL - Problema con consulta

 
Vista:

Problema con consulta

Publicado por nerolf (2 intervenciones) el 01/08/2007 23:21:12
Estoy empezando en este tema de base de datos, y me he liado haciendo una página para las actividades de mi hija. Es una página que utiliza joomla y mysql.

Bien mi problema es el siguiente.
La base de datos es de atletismo y solamente cuenta con dos tablas. (Atletas y pruebas).

La consulta que realizo y funciona correctamente es:

SELECT dat_pruebas.id_atl, Max(dat_pruebas.marca) AS MáxDemarca, dat_pruebas.prueba, dat_atletas.apellidos, dat_atletas.nombre, dat_atletas.sexo, dat_pruebas.temp, dat_pruebas.categoria
FROM dat_atletas INNER JOIN dat_pruebas ON dat_atletas.id_atl = dat_pruebas.id_atl
GROUP BY dat_pruebas.id_atl, dat_pruebas.prueba, dat_atletas.apellidos, dat_atletas.nombre, dat_atletas.sexo, dat_pruebas.temp, dat_pruebas.categoria
HAVING (((dat_pruebas.prueba) Like "jabalina 4*") AND ((dat_atletas.sexo)="m") AND ((dat_pruebas.temp)="67") AND ((dat_pruebas.categoria)="I"))
ORDER BY Max(dat_pruebas.marca) DESC;

Después en la página recojo variables como la prueba, sexo, temporada, categoria mediante un formulario y la cosa funciona bien, mostrandome las mejores marcas de cada atleta en cada prueba.

El problema me aparece si intento que además me muestre la localidad donde se realizo la prueba y la fecha en la que se celebró. Entonces me aparecen atletas repetidos, es decir, por ejemplo aparece un atleta con su mejor marca en cada una de las ciudades o fechas, y yo solo quiero la mejor de ellas.

La consulta que realizo es:

SELECT dat_pruebas.id_atl, Max(dat_pruebas.marca) AS MáxDemarca, dat_pruebas.prueba, dat_atletas.apellidos, dat_atletas.nombre, dat_atletas.sexo, dat_pruebas.temp, dat_pruebas.categoria, dat_pruebas.fecha, dat_pruebas.localidad
FROM dat_atletas INNER JOIN dat_pruebas ON dat_atletas.id_atl = dat_pruebas.id_atl
GROUP BY dat_pruebas.id_atl, dat_pruebas.prueba, dat_atletas.apellidos, dat_atletas.nombre, dat_atletas.sexo, dat_pruebas.temp, dat_pruebas.categoria, dat_pruebas.fecha, dat_pruebas.localidad
HAVING (((dat_pruebas.prueba) Like "jabalina 4*") AND ((dat_atletas.sexo)="m") AND ((dat_pruebas.temp)="67") AND ((dat_pruebas.categoria)="I"))
ORDER BY Max(dat_pruebas.marca) DESC;

No se como solucionar el problema. Subconsultas?

Perdón por la osadia de dirigirme a usted. Si le he molestado disculpe. No es necesario que conteste si no quiere o le roba tiempo. Gracias y de nuevo perdón.


Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con consulta

Publicado por Gabo77 (1 intervención) el 04/08/2007 15:42:54
Suponiendo que tienes un campo llave dentro de la tabla dat_pruebas y que ete se llame id_prueba puedes hacer lo siguiente.

SELECT dat_pruebas.id_atl, Max(dat_pruebas.marca) AS MáxDemarca,
dat_pruebas.prueba, dat_atletas.apellidos, dat_atletas.nombre, dat_atletas.sexo,
dat_pruebas.temp, dat_pruebas.categoria,
P2.dat_pruebas.fecha, P2.dat_pruebas.localidad
FROM dat_atletas
INNER JOIN dat_pruebas
ON dat_atletas.id_atl = dat_pruebas.id_atl
INNER JOIN dat_pruebas p2
ON p2.Id_Prueba = dat_pruebas.Id_Prueba
GROUP BY dat_pruebas.id_atl, dat_pruebas.prueba, dat_atletas.apellidos,
dat_atletas.nombre, dat_atletas.sexo, dat_pruebas.temp, dat_pruebas.categoria,
dat_pruebas.fecha, dat_pruebas.localidad
HAVING (((dat_pruebas.prueba) Like "jabalina 4*")
AND ((dat_atletas.sexo)="m")
AND ((dat_pruebas.temp)="67")
AND ((dat_pruebas.categoria)="I"))
ORDER BY Max(dat_pruebas.marca) DESC

Perdone usted si esto no soluciona su problema, no es mi intención importunarlo, ni quitarle su tiempo con mis tonterias, ojala no se moleste y si es así ignoreme por favor...

Saludos! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con consulta

Publicado por nerolf (2 intervenciones) el 05/08/2007 22:08:47
Gracias por contestar, y de verás agradecido por la molestia tomadas:

He intentado ejecutar la sentencia y me da el siguiente error:

Error de sintaxis (falta operador) en la expresión de consulta ‘dat_atletas.id_atl = dat_pruebas.id_atl INNER JOIN dat_pruebas p2
ON p2.id_pru = dat_pruebas.id_pru

(El campo clave de la tabla es id_pru)

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar