Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Consulta Historial De Llamadas (https://www.clubdelphi.com/foros/showthread.php?t=49335)

elprimo 18-10-2007 22:45:20

Consulta Historial De Llamadas
 
Tengo 3 tablas una de clientes, llamadas y posibles respuestas. Deseo realizar una consulta que me muestre solamente clientes con determinada respuesta pero que esta sea la ultima realizada. el historial lo controlo mediante fechas.!!

nuk3zito 18-10-2007 23:51:45

¿Es la primera vez que programas?

Caral 18-10-2007 23:59:45

Hola
Cita:

Empezado por nuk3zito (Mensaje 239572)
¿Es la primera vez que programas?

Como se va a pensar eso, es la segunda vez por lo menos, seguro.:D
Saludos

nuk3zito 19-10-2007 00:02:49

Cita:

Empezado por Caral (Mensaje 239578)
Hola

Como se va a pensar eso, es la segunda vez por lo menos, seguro.:D
Saludos

jajaja, cierto, puesto que ya tiene como 5 post.

Amigo "elprimo", sin afán de ofender te recomiendo que leas algún cursito pequeño de bases de datos, ya que lo que pide sale con un query extremadamente sencillo (aunque desconozco las tablas que usas... pero pa'l caso es lo mismo)

Saludos.

elprimo 19-10-2007 00:14:12

asi es, estoy realizando una base para control de llamadas.
*la 1 tabla se llama clientes contiene los campos: idcliente, nombrecliente y telefono.
*la 2 se llama respuestas y contiene tres posibles respuestas (si, no, espera) sus campos son idrespuesta y respuesta.
*la 3 se llama historial, contiene los campos idllamada, fecha, cliente(c/relacion de 1 a varios con idcliente) repuesta(c/relacion de 1a varios con Id respuesta). y notas

las consultas normales me las ejecuta bien.!!!
el problema es que yo necesito una consulta que me arroje la ultima respuesta por cada cliente, ejemplo si a juan le hable tres veces que me muestre la ultima llamada segun la fecha, (esto para todos lors registro)

Espero haber sido claro y que alguien me pueda ayudar.!!! Gracias de antemano

poliburro 19-10-2007 00:15:01

jajaja, pensé que era el único que le daba flojera responder este tipo de post.

elprimo 19-10-2007 00:16:29

es el segundo post que publico!!! si me pueden ayudar gracias nuevamente.!!! y ya lei varios manuales qpero lo que necesito es algo complejo para mi por lo menos pero para los massters como ustedes a de ser sencillo, perdon por no ser especifico antes..!!

Caral 19-10-2007 00:16:33

Hola
Ya fuera de bromas, espero no te molestes elprimo, es un poco de humor sano.
La verdad tu pregunta es muy extensa, mas sin conocer muchos de los detalles que se necesitarian para contestar correctamente.
Lo que se hace normalmente en estos casos es indicar el codigo que se usa o quiere usar o tal vez mencionar algunos datos mas concretos.
Es muy dificil contestar preguntas asi, por lo menos en mi caso.
Si te explicas un poco mejor, seguro se te ayudara tambien mejor.
Como ya te dijeron esto se puede hacer con una consulta sql, es una de las tantas soluciones.
Saludos

elprimo 19-10-2007 00:19:20

estoy trabajando en acces.!!!! Gracias pero si me saque de onda derepente.!!!!!

poliburro 19-10-2007 00:20:56

vale, pues, suponiendo que IdLlamada es llave primaria y por lo tanto única:
la consulta sería de esta manera.


asi es, estoy realizando una base para control de llamadas.
*la 1 tabla se llama clientes contiene los campos: idcliente, nombrecliente y telefono.
*la 2 se llama respuestas y contiene tres posibles respuestas (si, no, espera) sus campos son idrespuesta y respuesta.
*la 3 se llama historial, contiene los campos idllamada, fecha, cliente(c/relacion de 1 a varios con idcliente) repuesta(c/relacion de 1a varios con Id respuesta). y notas


Código SQL [-]
 
  Select  Historia.IdLlamada, Clientes.NombreCliente, Clientes.Telefono,
             Respuesta.Respuesta
      From Historia As Historia
    Inner Join (
                      Select Max(IdLlamada)
                        From Historia
                      Where Cliente = IdCliente
                  ) As UltimaLLamada
        On Historia.IdLlamada = UltimaLlamada.IdLlamada
 Left Join Clientes As clientes
         On Historia.IdCliente = Clientes.IdCliente
 Left Join  Respuestas As Respuestas
         On Historia.IdRespuesta = Respuestas.IdRespuesta

eduarcol 19-10-2007 00:21:26

Entrando en seriedad y recalcando lo que te dijo el buen amigo Carlos, seria aventurar pero alli te doy una idea

en la consulta sql donde recuperas la informacion al final colocale,

Código SQL [-]
... order by Fecha Desc

eso te ordenaria la consulta por fechas en forma descendente(Mayor a menor), como tu dices qeu quieres saber la ultima respuesta se supone que la primera es la mayor fecha por lo tanto la ultima respuesta.

esto sirve solo si esto es cierto
Cita:

Empezado por elprimo
el historial lo controlo mediante fechas.!!

edito: Se me adelanto poliburro, por lo visto el entendio mejor lo que necesitas

poliburro 19-10-2007 00:21:37

Cita:

Empezado por elprimo (Mensaje 239600)
estoy trabajando en acces.!!!! Gracias pero si me saque de onda derepente.!!!!!

ahhhh, y hasta ahora me dices que es access jajajaja, la consulta que acabo de postearte no funciona en access,

Caral 19-10-2007 00:22:20

Hola
Bueno ya es un comienzo, pense que era sql server por estar en ese foro.
No hay problema.
Pon la base de datos aqui y lo veo, si tienes el programa y no es muy grande tambien.
Si te parece, asi podre analizar mejor lo que quieres hacer.
Saludos

nuk3zito 19-10-2007 00:23:32

Código SQL [-]
select top 1 R.idrespuesta, R.respuesta from Historial H
inner join respuestas R on R.idrespuesta = H.respuesta
inner join clientes C on C.idcliente = H.idcliente
order by H.Fecha desc

Habrá que probar si esta si funciona en access (sobre todo por el TOP 1)

Saludos.

elprimo 19-10-2007 00:24:30

gracias.!!! a todos.!!! la base pesa 18Megas porque ya le cargue 10,000 datos y le cree algunos formularios y demas consultas.!!!

poliburro 19-10-2007 00:25:32

la misma consulta optimizada para access


Código SQL [-]
 
Select  Final.IdLlamada, Final.NombreLciente, Final.Telefono, Respuestas.Respuesta
   From (
           Select IdLlamada, Clientes.NombreCliente, 
                     Clientes.Telefono, IdRespuesta
              From (
                       Select  Historia.IdLlamada, Historia.IdCLiente, 
                                 Historia.IdRespuesta
                         From Historia As Historia
                  Inner Join ( Select Max(IdLlamada)  From Historia
                                 Where Cliente = IdCliente ) As UltimaLLamada
                          On Historia.IdLlamada = UltimaLlamada.IdLlamada
                      ) As DatosHistoria
          Left Join Clientes As clientes
                 On DatosHistoria.IdCliente = Clientes.IdCliente
          ) As Final
 Left Join  Respuestas As Respuestas
         On Final.IdRespuesta = Respuestas.IdRespuesta

nuk3zito 19-10-2007 00:28:27

Escoge la mía... está más "sencishita", jajajaja

Nada más corrige los nombres reales de los campos porque sospecho que puse alguno mal.

Caral 19-10-2007 00:29:42

Hola
Me la pones dificil
Perdon
Saludos

poliburro 19-10-2007 00:30:03

Cita:

Empezado por nuk3zito (Mensaje 239611)
Escoge la mía... está más "sencishita", jajajaja

Nada más corrige los nombres reales de los campos porque sospecho que puse alguno mal.


jajaja, concuerdo contigo mi amigo, lamentablemente esa consulta bajo access no sirve. :P, Además de que agregas un coste adicional al aplicar el order, si no me cres, dale una checada al plan de ejecución.

poliburro 19-10-2007 00:31:00

Cita:

Empezado por Caral (Mensaje 239612)
Hola
Me la pones dificil
Perdon
Saludos


estimado caral, que estás fumando?


La franja horaria es GMT +2. Ahora son las 09:10:16.

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