Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
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
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 18-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Me convendra sacar el TOP y jugar con un filtro?

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #3  
Antiguo 18-04-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
¿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 no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #4  
Antiguo 18-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
¿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?
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #5  
Antiguo 18-04-2008
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 18-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Cita:
Empezado por luisgutierrezb Ver Mensaje
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.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #7  
Antiguo 18-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
SOLUCIONADO

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

Código Delphi [-]
 
MiQuery.Sort:='tocado DESC';
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta en Access perillan Conexión con bases de datos 2 01-04-2008 13:44:57
Consulta en access Joseph Merrick SQL 0 15-12-2006 03:34:22
Duda con una consulta en access bustio Tablas planas 2 14-03-2005 15:51:35
ejecutar consulta de access juanmdq Tablas planas 2 07-01-2005 13:59:19
consulta con Access y ADO JODELSA Conexión con bases de datos 5 24-10-2003 17:24:19


La franja horaria es GMT +2. Ahora son las 02:36:12.


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
Copyright 1996-2007 Club Delphi