Access - Ayuda para consulta compleja

 
Vista:

Ayuda para consulta compleja

Publicado por Vicenç Arnal (2 intervenciones) el 05/10/2011 23:50:32
Necesito ayuda con una consulta (SQL) para la que no encuentro solución.

Quiero obtener los registros de una tabla que cumplan:
- Tener un Valor menor o igualr a un valor dado (X).
- Unicamente el registro con mayor Valor para todos los registros con el mismo Nombre.

Por ejemplo, dada la tabla:
1
2
3
4
5
6
7
Id  Nombre   Valor
1    aa        4
2    aa        9
3    aa        6
4    bb        6
5    bb        8
6    bb       10


deseo que me devuelva (para X = 8) los registros Id = 3 y 5.
Gracias
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

Ayuda para consulta compleja

Publicado por jose (830 intervenciones) el 06/10/2011 21:24:53
SELECT Tabla1.Nombre, Tabla1.Valor
FROM Tabla1
WHERE (((Tabla1.Valor)<=8));




SELECT DISTINCT Tabla1.Nombre, Max(Tabla1.Valor) AS MáxDevalor
FROM Tabla1
GROUP BY Tabla1.Nombre;
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

Ayuda para consulta compleja, Final

Publicado por Vicenç Arnal (2 intervenciones) el 07/10/2011 16:59:07
He integrado ambas consultas en una sola, quedando como sigue:

1
2
3
4
5
6
SELECT DISTINCT Consul1.Nombre, Max(Consul1.Valor) AS MaxDevalor
FROM
  (SELECT Tabla1.Nombre, Tabla1.Valor
  FROM Tabla1
  WHERE (((Tabla1.Valor)<=8))) AS Consul1
GROUP BY Consul1.Nombre;


En este punto me devuelve los valores de Nombre y Valor, pero para requerir el valor de los Id (o cualquier otro de la Tabla1) siempre obtengo el error
“Ha intentado ejecutar una consulta que no incluye la expresión especificada ‘Id’ como parte de una función de agregado.”
Lo he solucionado integrando la consulta en otra como aparece a continuación:

1
2
3
4
5
6
7
8
9
SELECT Tabla1.Id, Tabla1.Nombre, Tabla1.Valor
FROM Tabla1,
  (SELECT DISTINCT Consul1.Nombre, Max(Consul1.Valor) AS MaxDevalor
  FROM
    (SELECT Tabla1.Nombre, Tabla1.Valor
    FROM Tabla1
    WHERE (((Tabla1.Valor)<=8))) AS Consul1
  GROUP BY Consul1.Nombre) AS Consul2
WHERE ((Tabla1.Nombre=Consul2.Nombre) AND (Tabla1.Valor=Consul2.MaxDevalor));


Gracias jose por la orientación.
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