Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL en Access (https://www.clubdelphi.com/foros/showthread.php?t=55373)

MaMu 15-04-2008 12:29:44

Consulta SQL en Access
 
Yo estoy haciendo esta consulta a una BD Access (usando ADO y D7):

Código SQL [-]
 
select top 5 * from (select distinct(A.tema),A.titulo,A.duracion,A.artista,
(select count(B.tema) from ranking B where B.tema=A.tema) as tocado
from ranking A)

Lo que intento es devolver 5 temas musicales de un ranking de temas, y envolver en la variable tocado las veces que fue puesto al aire.
Ahora bien, el TOP solo me limita la cantidad de registros, por lo que la consulta no es real, es decir, los primeros 5 resultados no necesariamente son los temas más tocados, sino los primeros 5 que encontró la consulta.
El problema se ve que radica en el distinct ya que no me permite un

Código SQL [-]
 
order by tocado

Entonces, como puedo hacer para que la consulta apunte a los 5 temas más tocados? El distinct lo aplico al campo tema porque éste no varía. (un mismo tema puede ser interpretado por diferentes artistas, e incluso pueden diferir en duración)

Saludos y gracias

MaMu 18-04-2008 05:52:14

Me convendra sacar el TOP y jugar con un filtro?

Saludos

Ivanzinho 18-04-2008 08:46:27

¿Probaste a poner order by 5?, donde 5 es la posición del campo tocado en la consulta. No sé si funcionará en access, en firebird se haría así.

Un saúdo.

MaMu 18-04-2008 19:24:29

Cita:

Empezado por Ivanzinho (Mensaje 280933)
¿Probaste a poner order by 5?, donde 5 es la posición del campo tocado en la consulta. No sé si funcionará en access, en firebird se haría así.

Un saúdo.

Si, también lo probé, pero no funciona. También LIMIT, pero no funciona en Access.
Yo necesitaría esto:

Código SQL [-]
select TOP 5 * from (select distinct(A.tema),A.titulo,A.duracion,A.artista,
(select count(B.tema) from ranking B where B.tema=A.tema) as tocado
from ranking A) order by tocado desc

Pero el TOP 5 se anula con la cláusula ORDEY BY de un campo calculado. Ordenar me lo ordena, pero no me limita a 5 registros, sino que me vuelca todos. También probé cambiando la propiedad MaxRecords a 5 del ADOQuery, pero tampoco funciona.

Alguna idea?

luisgutierrezb 18-04-2008 20:47:49

solo se me ocurre que hagas una vista (o consulta en access) con la consulta que necesitas y cuando la mandes llamar utilizes el top 5 a ver si te trae solo los primeros 5

MaMu 18-04-2008 21:14:44

Cita:

Empezado por luisgutierrezb (Mensaje 281103)
solo se me ocurre que hagas una vista (o consulta en access) con la consulta que necesitas y cuando la mandes llamar utilizes el top 5 a ver si te trae solo los primeros 5

Tampoco funciona, acabo de probarlo.
Hasta ahora, lo unico que se ocurre, es crear una tabla en memoria, cargandoles solamente los primeros registros.

MaMu 18-04-2008 23:19:14

SOLUCIONADO

Obviamente, la solución fué de lo más simple, y estaba a la vista.

Código Delphi [-]
 
MiQuery.Sort:='tocado DESC';


La franja horaria es GMT +2. Ahora son las 01:50:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi