Imprimir página | Cerrar ventana

consulta de SELECT TOP

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84917
Fecha de impresión: 27/Marzo/2026 a las 04:08


Tema: consulta de SELECT TOP
Publicado por: cpampasPT
Asunto: consulta de SELECT TOP
Fecha de publicación: 26/Diciembre/2019 a las 10:05
Hola a Todos y Felices Fiestas,

Llevo intentando hace algun tiempo  crear una consulta que me liste la media  los 2  registros con valor mas alto agrupados por nombre, o sea :

mi tabla tiene los siguientes datos :

jogoPla Plaganha
Brescia - Lazio 6
Brescia - Lazio 6
Brescia - Lazio 5.95
Brescia - Lazio 5.89
Brescia - Lazio 5.8
Brescia - Lazio 5.8
Brescia - Lazio 5.75
Brescia - Lazio 5.75
Brescia - Lazio 5.6
Brescia - Lazio 5.55
Brescia - Lazio 5.5
Brescia - Lazio 5.45

Lo que pretendo es hacer la media de 6 con 5.95, que son los 2 de valor mas alto, agrupados por el campor jogoPla

intente asi :

SELECT tblPlacardTodosAvg.jogoPla, tblPlacardTodosAvg.Plaganha
FROM tblPlacardTodosAvg
WHERE (((tblPlacardTodosAvg.Plaganha) In (SELECT TOP 5 percent Plaganha 
    FROM tblPlacardTodosAvg 
    ORDER BY Plaganha DESC
)))
GROUP BY tblPlacardTodosAvg.jogoPla, tblPlacardTodosAvg.Plaganha
ORDER BY tblPlacardTodosAvg.Plaganha DESC;

pero no consigo los 2 de superior, por lo que creo deberia usar SELECT TOP 2 pero no consigo el resultado deseado
Alguna idea ?




Respuestas:
Publicado por: pitxiku
Fecha de publicación: 26/Diciembre/2019 a las 19:36
A ver si algo así sirve:

1. Una consulta con los valores distintos de Plaganha
2. Una consulta que devuelva los 2 valores mayores de la consulta 1
3. Una consulta con la tabla y la consulta del paso 2, relacionadas por los 2 campos, y que sea de totales para que calcule la media


Publicado por: cpampasPT
Fecha de publicación: 27/Diciembre/2019 a las 09:51
Gracias pitxiku

Con tu sugerencia ya avance bastante , asi que ahora ya consigo el resultado de los dos valores mas altos en la tabla, asi :

SELECT main.jogopla, main.plaganha
FROM (SELECT t.jogopla, t.plaganha, (SELECT Count(*) FROM tblPlacardTodosAvg sub
WHERE sub.plaganha >= t.plaganha   AND sub.jogopla = t.jogopla) AS grupo FROM tblPlacardTodosAvg AS t)  AS main
WHERE (((main.jogopla)="Brescia - Lazio") AND ((main.grupo)<=2))
ORDER BY main.jogopla, main.plaganha DESC;

el resultado es :

jogopla plaganha
Brescia - Lazio 6.50
Brescia - Lazio 6.25

ahora con una segunda consulta de agrupacion de la anterior consigo la media de 6.50 con 6.25

Pero me pregunto, sera posible hacerlo todo en la consulta que pongo antes ?, y no recurrir a una segunda basada en la primera?  es que despues quiero  construir una string con la sintaxis de la consulta para poder utilizarla en mi codigo VBA



Publicado por: cpampasPT
Fecha de publicación: 27/Diciembre/2019 a las 17:12
Al final opto por una segunda consulta basada en la primera para conseguir lo pretendido
En todo caso ya no se si debo hacer esto y la razon es que el sistema se hace muy lento , ahora tardo mas de 1 minuto en cargar el formulario

Lo voy a averiguar algo mas, pero mientras, creo que podeis cerrar el hilo
Gracias


Publicado por: cpampasPT
Fecha de publicación: 29/Diciembre/2019 a las 09:38
Gracias y podeis cerrar el hilo



Imprimir página | Cerrar ventana