Consulta de Rangos

01/03/2005 - 18:21 por Lucho | Informe spam
Hola amigos:

Tengo la siguiente consulta, que me arroja un conjunto de
registros de llamadas durante el mes de Enero:

SELECT eBD.CLIENTES.IdentificacionCliente as 'NIT',
eBD.CLIENTES.NombreCliente AS 'CLIENTE',
eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
eBD.LLAMADAS.FechaHoraLlamada
AS 'FECHA Y HORA DE LA LLAMADA',
eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
FROM eBD.CLIENTES INNER JOIN
eBD.LLAMADAS ON
eBD.CLIENTES.IdentificacionCliente =
eBD.LLAMADAS.IdentificacionCliente INNER JOIN
eBD.PRODUCTOSLLAMADAS ON
eBD.LLAMADAS.CodigoLlamada =
eBD.PRODUCTOSLLAMADAS.CodigoLlamada INNER JOIN
eBD.PRODUCTOS ON
eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada =
eBD.PRODUCTOS.CodigoProducto
WHERE (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
ORDER BY eBD.clientes.identificacioncliente

Las columnas que me devulve la consulta son :

NIT
CLIENTE
CODIGO DE LLAMADA
FECHA Y LA HORA DE LA LLAMADA
PRODUCTO
DESCRIPCION DE LA LLAMADA

Esta sentencia esta bien y me esta devolviendo los datos
que necesito... pero necesito que me traiga solamente los
clientes que llamaron mas de dos veces durante este rango
de fechas.

Agradezco su amable colaboracion

Lucho

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
01/03/2005 - 18:47 | Informe spam
Lucho,

Trata con la siguiente sentencia:

SELECT
eBD.CLIENTES.IdentificacionCliente as 'NIT',
eBD.CLIENTES.NombreCliente AS 'CLIENTE',
eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
eBD.LLAMADAS.FechaHoraLlamada AS 'FECHA Y HORA DE LA LLAMADA',
eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
FROM
eBD.CLIENTES
INNER JOIN
eBD.LLAMADAS
ON eBD.CLIENTES.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
INNER JOIN
eBD.PRODUCTOSLLAMADAS
ON eBD.LLAMADAS.CodigoLlamada = eBD.PRODUCTOSLLAMADAS.CodigoLlamada
INNER JOIN
eBD.PRODUCTOS
ON eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada = eBD.PRODUCTOS.CodigoProducto
WHERE
(eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
and exists(
select
1
from
eBD.LLAMADAS as l
where
l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
and l.FechaHoraLlamada >= '20050101'
and l..FechaHoraLlamada <= '20050131'
group by
l.IdentificacionCliente
having
count(*) > 2
)
ORDER BY
eBD.clientes.identificacioncliente
go

Puede que esta no sea la solucion mas adecuada, pero por falta de
informacion sobre las tablas involucradas en el query (definicion,
constraints, etc.) esto es lo mejor que puedo hacer.

En estos casos siempre es bienvenido el que se adjunte las sentencias de
definicion de datos (DDL), valores de ejemplo y el resultado esperado.


AMB

"Lucho" wrote:

Hola amigos:

Tengo la siguiente consulta, que me arroja un conjunto de
registros de llamadas durante el mes de Enero:

SELECT eBD.CLIENTES.IdentificacionCliente as 'NIT',
eBD.CLIENTES.NombreCliente AS 'CLIENTE',
eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
eBD.LLAMADAS.FechaHoraLlamada
AS 'FECHA Y HORA DE LA LLAMADA',
eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
FROM eBD.CLIENTES INNER JOIN
eBD.LLAMADAS ON
eBD.CLIENTES.IdentificacionCliente =
eBD.LLAMADAS.IdentificacionCliente INNER JOIN
eBD.PRODUCTOSLLAMADAS ON
eBD.LLAMADAS.CodigoLlamada =
eBD.PRODUCTOSLLAMADAS.CodigoLlamada INNER JOIN
eBD.PRODUCTOS ON
eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada =
eBD.PRODUCTOS.CodigoProducto
WHERE (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
ORDER BY eBD.clientes.identificacioncliente

Las columnas que me devulve la consulta son :

NIT
CLIENTE
CODIGO DE LLAMADA
FECHA Y LA HORA DE LA LLAMADA
PRODUCTO
DESCRIPCION DE LA LLAMADA

Esta sentencia esta bien y me esta devolviendo los datos
que necesito... pero necesito que me traiga solamente los
clientes que llamaron mas de dos veces durante este rango
de fechas.

Agradezco su amable colaboracion

Lucho

Respuesta Responder a este mensaje
#2 Lucho
01/03/2005 - 22:00 | Informe spam
Hola alejandro:

Agradezco tu amable ayuda, pero tengo una pregunta que hacerte... que
significa el numero 1 que colocaste en el complemento de mi sentencia ??? la
verdad no lo entiendo

Gracias

Lucho


"Alejandro Mesa" escribió en el
mensaje news:
Lucho,

Trata con la siguiente sentencia:

SELECT
eBD.CLIENTES.IdentificacionCliente as 'NIT',
eBD.CLIENTES.NombreCliente AS 'CLIENTE',
eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
eBD.LLAMADAS.FechaHoraLlamada AS 'FECHA Y HORA DE LA LLAMADA',
eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
FROM
eBD.CLIENTES
INNER JOIN
eBD.LLAMADAS
ON eBD.CLIENTES.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
INNER JOIN
eBD.PRODUCTOSLLAMADAS
ON eBD.LLAMADAS.CodigoLlamada = eBD.PRODUCTOSLLAMADAS.CodigoLlamada
INNER JOIN
eBD.PRODUCTOS
ON eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada eBD.PRODUCTOS.CodigoProducto
WHERE
(eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
and exists(
select
1
from
eBD.LLAMADAS as l
where
l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
and l.FechaHoraLlamada >= '20050101'
and l..FechaHoraLlamada <= '20050131'
group by
l.IdentificacionCliente
having
count(*) > 2
)
ORDER BY
eBD.clientes.identificacioncliente
go

Puede que esta no sea la solucion mas adecuada, pero por falta de
informacion sobre las tablas involucradas en el query (definicion,
constraints, etc.) esto es lo mejor que puedo hacer.

En estos casos siempre es bienvenido el que se adjunte las sentencias de
definicion de datos (DDL), valores de ejemplo y el resultado esperado.


AMB

"Lucho" wrote:

> Hola amigos:
>
> Tengo la siguiente consulta, que me arroja un conjunto de
> registros de llamadas durante el mes de Enero:
>
> SELECT eBD.CLIENTES.IdentificacionCliente as 'NIT',
> eBD.CLIENTES.NombreCliente AS 'CLIENTE',
> eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
> eBD.LLAMADAS.FechaHoraLlamada
> AS 'FECHA Y HORA DE LA LLAMADA',
> eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
> eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
> FROM eBD.CLIENTES INNER JOIN
> eBD.LLAMADAS ON
> eBD.CLIENTES.IdentificacionCliente > > eBD.LLAMADAS.IdentificacionCliente INNER JOIN
> eBD.PRODUCTOSLLAMADAS ON
> eBD.LLAMADAS.CodigoLlamada > > eBD.PRODUCTOSLLAMADAS.CodigoLlamada INNER JOIN
> eBD.PRODUCTOS ON
> eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada > > eBD.PRODUCTOS.CodigoProducto
> WHERE (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
> AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
> ORDER BY eBD.clientes.identificacioncliente
>
> Las columnas que me devulve la consulta son :
>
> NIT
> CLIENTE
> CODIGO DE LLAMADA
> FECHA Y LA HORA DE LA LLAMADA
> PRODUCTO
> DESCRIPCION DE LA LLAMADA
>
> Esta sentencia esta bien y me esta devolviendo los datos
> que necesito... pero necesito que me traiga solamente los
> clientes que llamaron mas de dos veces durante este rango
> de fechas.
>
> Agradezco su amable colaboracion
>
> Lucho
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
01/03/2005 - 22:35 | Informe spam
Lucho,

El # 1 es una constante que use para no tener que poner una funcion de grupo
o columnas involucradas en la clausula GROUP BY, pudieras usar la constante
que quieras incluyendo el valor NULL. Que tal si usamos:

...
and exists (
select
l.IdentificacionCliente
from
eBD.LLAMADAS as l
where
l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
and l.FechaHoraLlamada >= '20050101'
and l..FechaHoraLlamada <= '20050131'
group by
l.IdentificacionCliente
having
count(*) > 2
)
...

El query dentro del EXISTS, es un query correlacionado que devuelve el valor
de "IdentificacionCliente" si la cantidad de filas en la tabla "eBD.LLAMADAS"
para ese cliente y en ese rango de fechas son mas de dos. tambien pudieramos
hacer:

...
and (
select
count(*)
from
eBD.LLAMADAS as l
where
l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
and l.FechaHoraLlamada >= '20050101'
and l..FechaHoraLlamada <= '20050131'
group by
l.IdentificacionCliente
) > 2
...

Esto se traduce como: si el numero de llamadas de ese cliente en ese rango
de fechas es mayor que dos.


AMB

"Lucho" wrote:

Hola alejandro:

Agradezco tu amable ayuda, pero tengo una pregunta que hacerte... que
significa el numero 1 que colocaste en el complemento de mi sentencia ??? la
verdad no lo entiendo

Gracias

Lucho


"Alejandro Mesa" escribió en el
mensaje news:
> Lucho,
>
> Trata con la siguiente sentencia:
>
> SELECT
> eBD.CLIENTES.IdentificacionCliente as 'NIT',
> eBD.CLIENTES.NombreCliente AS 'CLIENTE',
> eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
> eBD.LLAMADAS.FechaHoraLlamada AS 'FECHA Y HORA DE LA LLAMADA',
> eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
> eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
> FROM
> eBD.CLIENTES
> INNER JOIN
> eBD.LLAMADAS
> ON eBD.CLIENTES.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
> INNER JOIN
> eBD.PRODUCTOSLLAMADAS
> ON eBD.LLAMADAS.CodigoLlamada = eBD.PRODUCTOSLLAMADAS.CodigoLlamada
> INNER JOIN
> eBD.PRODUCTOS
> ON eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada > eBD.PRODUCTOS.CodigoProducto
> WHERE
> (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
> AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
> and exists(
> select
> 1
> from
> eBD.LLAMADAS as l
> where
> l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
> and l.FechaHoraLlamada >= '20050101'
> and l..FechaHoraLlamada <= '20050131'
> group by
> l.IdentificacionCliente
> having
> count(*) > 2
> )
> ORDER BY
> eBD.clientes.identificacioncliente
> go
>
> Puede que esta no sea la solucion mas adecuada, pero por falta de
> informacion sobre las tablas involucradas en el query (definicion,
> constraints, etc.) esto es lo mejor que puedo hacer.
>
> En estos casos siempre es bienvenido el que se adjunte las sentencias de
> definicion de datos (DDL), valores de ejemplo y el resultado esperado.
>
>
> AMB
>
> "Lucho" wrote:
>
> > Hola amigos:
> >
> > Tengo la siguiente consulta, que me arroja un conjunto de
> > registros de llamadas durante el mes de Enero:
> >
> > SELECT eBD.CLIENTES.IdentificacionCliente as 'NIT',
> > eBD.CLIENTES.NombreCliente AS 'CLIENTE',
> > eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
> > eBD.LLAMADAS.FechaHoraLlamada
> > AS 'FECHA Y HORA DE LA LLAMADA',
> > eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
> > eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
> > FROM eBD.CLIENTES INNER JOIN
> > eBD.LLAMADAS ON
> > eBD.CLIENTES.IdentificacionCliente > > > eBD.LLAMADAS.IdentificacionCliente INNER JOIN
> > eBD.PRODUCTOSLLAMADAS ON
> > eBD.LLAMADAS.CodigoLlamada > > > eBD.PRODUCTOSLLAMADAS.CodigoLlamada INNER JOIN
> > eBD.PRODUCTOS ON
> > eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada > > > eBD.PRODUCTOS.CodigoProducto
> > WHERE (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
> > AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
> > ORDER BY eBD.clientes.identificacioncliente
> >
> > Las columnas que me devulve la consulta son :
> >
> > NIT
> > CLIENTE
> > CODIGO DE LLAMADA
> > FECHA Y LA HORA DE LA LLAMADA
> > PRODUCTO
> > DESCRIPCION DE LA LLAMADA
> >
> > Esta sentencia esta bien y me esta devolviendo los datos
> > que necesito... pero necesito que me traiga solamente los
> > clientes que llamaron mas de dos veces durante este rango
> > de fechas.
> >
> > Agradezco su amable colaboracion
> >
> > Lucho
> >



Respuesta Responder a este mensaje
#4 Lucho
01/03/2005 - 22:58 | Informe spam
hummmm pregunta amigo:

En teoria la consulta deberia correr bien en el Analizador de consultas ..
pero me saca un error..

El error dice :

Servidor: mensaje 1004, nivel 15, estado 1, línea 30
El prefijo de columna 'l.' no es válido: no se especificó ningún nombre de
tabla

Debido a esto es que te hago la pregunta.

Gracias


"Alejandro Mesa" escribió en el
mensaje news:
Lucho,

El # 1 es una constante que use para no tener que poner una funcion de


grupo
o columnas involucradas en la clausula GROUP BY, pudieras usar la


constante
que quieras incluyendo el valor NULL. Que tal si usamos:

...
and exists (
select
l.IdentificacionCliente
from
eBD.LLAMADAS as l
where
l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
and l.FechaHoraLlamada >= '20050101'
and l..FechaHoraLlamada <= '20050131'
group by
l.IdentificacionCliente
having
count(*) > 2
)
...

El query dentro del EXISTS, es un query correlacionado que devuelve el


valor
de "IdentificacionCliente" si la cantidad de filas en la tabla


"eBD.LLAMADAS"
para ese cliente y en ese rango de fechas son mas de dos. tambien


pudieramos
hacer:

...
and (
select
count(*)
from
eBD.LLAMADAS as l
where
l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
and l.FechaHoraLlamada >= '20050101'
and l..FechaHoraLlamada <= '20050131'
group by
l.IdentificacionCliente
) > 2
...

Esto se traduce como: si el numero de llamadas de ese cliente en ese rango
de fechas es mayor que dos.


AMB

"Lucho" wrote:

> Hola alejandro:
>
> Agradezco tu amable ayuda, pero tengo una pregunta que hacerte... que
> significa el numero 1 que colocaste en el complemento de mi sentencia


??? la
> verdad no lo entiendo
>
> Gracias
>
> Lucho
>
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Lucho,
> >
> > Trata con la siguiente sentencia:
> >
> > SELECT
> > eBD.CLIENTES.IdentificacionCliente as 'NIT',
> > eBD.CLIENTES.NombreCliente AS 'CLIENTE',
> > eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
> > eBD.LLAMADAS.FechaHoraLlamada AS 'FECHA Y HORA DE LA LLAMADA',
> > eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
> > eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
> > FROM
> > eBD.CLIENTES
> > INNER JOIN
> > eBD.LLAMADAS
> > ON eBD.CLIENTES.IdentificacionCliente eBD.LLAMADAS.IdentificacionCliente
> > INNER JOIN
> > eBD.PRODUCTOSLLAMADAS
> > ON eBD.LLAMADAS.CodigoLlamada = eBD.PRODUCTOSLLAMADAS.CodigoLlamada
> > INNER JOIN
> > eBD.PRODUCTOS
> > ON eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada > > eBD.PRODUCTOS.CodigoProducto
> > WHERE
> > (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
> > AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
> > and exists(
> > select
> > 1
> > from
> > eBD.LLAMADAS as l
> > where
> > l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
> > and l.FechaHoraLlamada >= '20050101'
> > and l..FechaHoraLlamada <= '20050131'
> > group by
> > l.IdentificacionCliente
> > having
> > count(*) > 2
> > )
> > ORDER BY
> > eBD.clientes.identificacioncliente
> > go
> >
> > Puede que esta no sea la solucion mas adecuada, pero por falta de
> > informacion sobre las tablas involucradas en el query (definicion,
> > constraints, etc.) esto es lo mejor que puedo hacer.
> >
> > En estos casos siempre es bienvenido el que se adjunte las sentencias


de
> > definicion de datos (DDL), valores de ejemplo y el resultado esperado.
> >
> >
> > AMB
> >
> > "Lucho" wrote:
> >
> > > Hola amigos:
> > >
> > > Tengo la siguiente consulta, que me arroja un conjunto de
> > > registros de llamadas durante el mes de Enero:
> > >
> > > SELECT eBD.CLIENTES.IdentificacionCliente as 'NIT',
> > > eBD.CLIENTES.NombreCliente AS 'CLIENTE',
> > > eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
> > > eBD.LLAMADAS.FechaHoraLlamada
> > > AS 'FECHA Y HORA DE LA LLAMADA',
> > > eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
> > > eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
> > > FROM eBD.CLIENTES INNER JOIN
> > > eBD.LLAMADAS ON
> > > eBD.CLIENTES.IdentificacionCliente > > > > eBD.LLAMADAS.IdentificacionCliente INNER JOIN
> > > eBD.PRODUCTOSLLAMADAS ON
> > > eBD.LLAMADAS.CodigoLlamada > > > > eBD.PRODUCTOSLLAMADAS.CodigoLlamada INNER JOIN
> > > eBD.PRODUCTOS ON
> > > eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada > > > > eBD.PRODUCTOS.CodigoProducto
> > > WHERE (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
> > > AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
> > > ORDER BY eBD.clientes.identificacioncliente
> > >
> > > Las columnas que me devulve la consulta son :
> > >
> > > NIT
> > > CLIENTE
> > > CODIGO DE LLAMADA
> > > FECHA Y LA HORA DE LA LLAMADA
> > > PRODUCTO
> > > DESCRIPCION DE LA LLAMADA
> > >
> > > Esta sentencia esta bien y me esta devolviendo los datos
> > > que necesito... pero necesito que me traiga solamente los
> > > clientes que llamaron mas de dos veces durante este rango
> > > de fechas.
> > >
> > > Agradezco su amable colaboracion
> > >
> > > Lucho
> > >
>
>
>
Respuesta Responder a este mensaje
#5 Alejandro Mesa
02/03/2005 - 00:57 | Informe spam
Lucho,

Puedes postear la sentencia para tener una mejor idea?


AMB

"Lucho" wrote:

hummmm pregunta amigo:

En teoria la consulta deberia correr bien en el Analizador de consultas ..
pero me saca un error..

El error dice :

Servidor: mensaje 1004, nivel 15, estado 1, línea 30
El prefijo de columna 'l.' no es válido: no se especificó ningún nombre de
tabla

Debido a esto es que te hago la pregunta.

Gracias


"Alejandro Mesa" escribió en el
mensaje news:
> Lucho,
>
> El # 1 es una constante que use para no tener que poner una funcion de
grupo
> o columnas involucradas en la clausula GROUP BY, pudieras usar la
constante
> que quieras incluyendo el valor NULL. Que tal si usamos:
>
> ...
> and exists (
> select
> l.IdentificacionCliente
> from
> eBD.LLAMADAS as l
> where
> l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
> and l.FechaHoraLlamada >= '20050101'
> and l..FechaHoraLlamada <= '20050131'
> group by
> l.IdentificacionCliente
> having
> count(*) > 2
> )
> ...
>
> El query dentro del EXISTS, es un query correlacionado que devuelve el
valor
> de "IdentificacionCliente" si la cantidad de filas en la tabla
"eBD.LLAMADAS"
> para ese cliente y en ese rango de fechas son mas de dos. tambien
pudieramos
> hacer:
>
> ...
> and (
> select
> count(*)
> from
> eBD.LLAMADAS as l
> where
> l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
> and l.FechaHoraLlamada >= '20050101'
> and l..FechaHoraLlamada <= '20050131'
> group by
> l.IdentificacionCliente
> ) > 2
> ...
>
> Esto se traduce como: si el numero de llamadas de ese cliente en ese rango
> de fechas es mayor que dos.
>
>
> AMB
>
> "Lucho" wrote:
>
> > Hola alejandro:
> >
> > Agradezco tu amable ayuda, pero tengo una pregunta que hacerte... que
> > significa el numero 1 que colocaste en el complemento de mi sentencia
??? la
> > verdad no lo entiendo
> >
> > Gracias
> >
> > Lucho
> >
> >
> > "Alejandro Mesa" escribió en
el
> > mensaje news:
> > > Lucho,
> > >
> > > Trata con la siguiente sentencia:
> > >
> > > SELECT
> > > eBD.CLIENTES.IdentificacionCliente as 'NIT',
> > > eBD.CLIENTES.NombreCliente AS 'CLIENTE',
> > > eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
> > > eBD.LLAMADAS.FechaHoraLlamada AS 'FECHA Y HORA DE LA LLAMADA',
> > > eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
> > > eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
> > > FROM
> > > eBD.CLIENTES
> > > INNER JOIN
> > > eBD.LLAMADAS
> > > ON eBD.CLIENTES.IdentificacionCliente > eBD.LLAMADAS.IdentificacionCliente
> > > INNER JOIN
> > > eBD.PRODUCTOSLLAMADAS
> > > ON eBD.LLAMADAS.CodigoLlamada = eBD.PRODUCTOSLLAMADAS.CodigoLlamada
> > > INNER JOIN
> > > eBD.PRODUCTOS
> > > ON eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada > > > eBD.PRODUCTOS.CodigoProducto
> > > WHERE
> > > (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
> > > AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
> > > and exists(
> > > select
> > > 1
> > > from
> > > eBD.LLAMADAS as l
> > > where
> > > l.IdentificacionCliente = eBD.LLAMADAS.IdentificacionCliente
> > > and l.FechaHoraLlamada >= '20050101'
> > > and l..FechaHoraLlamada <= '20050131'
> > > group by
> > > l.IdentificacionCliente
> > > having
> > > count(*) > 2
> > > )
> > > ORDER BY
> > > eBD.clientes.identificacioncliente
> > > go
> > >
> > > Puede que esta no sea la solucion mas adecuada, pero por falta de
> > > informacion sobre las tablas involucradas en el query (definicion,
> > > constraints, etc.) esto es lo mejor que puedo hacer.
> > >
> > > En estos casos siempre es bienvenido el que se adjunte las sentencias
de
> > > definicion de datos (DDL), valores de ejemplo y el resultado esperado.
> > >
> > >
> > > AMB
> > >
> > > "Lucho" wrote:
> > >
> > > > Hola amigos:
> > > >
> > > > Tengo la siguiente consulta, que me arroja un conjunto de
> > > > registros de llamadas durante el mes de Enero:
> > > >
> > > > SELECT eBD.CLIENTES.IdentificacionCliente as 'NIT',
> > > > eBD.CLIENTES.NombreCliente AS 'CLIENTE',
> > > > eBD.LLAMADAS.CodigoLlamada AS 'CODIGO DE LLAMADA',
> > > > eBD.LLAMADAS.FechaHoraLlamada
> > > > AS 'FECHA Y HORA DE LA LLAMADA',
> > > > eBD.PRODUCTOS.NombreProducto AS 'PRODUCTO',
> > > > eBD.LLAMADAS.DetalleLlamada AS 'MOTIVO DE LA LLAMADA'
> > > > FROM eBD.CLIENTES INNER JOIN
> > > > eBD.LLAMADAS ON
> > > > eBD.CLIENTES.IdentificacionCliente > > > > > eBD.LLAMADAS.IdentificacionCliente INNER JOIN
> > > > eBD.PRODUCTOSLLAMADAS ON
> > > > eBD.LLAMADAS.CodigoLlamada > > > > > eBD.PRODUCTOSLLAMADAS.CodigoLlamada INNER JOIN
> > > > eBD.PRODUCTOS ON
> > > > eBD.PRODUCTOSLLAMADAS.CodigoProductoLlamada > > > > > eBD.PRODUCTOS.CodigoProducto
> > > > WHERE (eBD.LLAMADAS.FechaHoraLlamada >= '20050101')
> > > > AND (eBD.LLAMADAS.FechaHoraLlamada <= '20050131')
> > > > ORDER BY eBD.clientes.identificacioncliente
> > > >
> > > > Las columnas que me devulve la consulta son :
> > > >
> > > > NIT
> > > > CLIENTE
> > > > CODIGO DE LLAMADA
> > > > FECHA Y LA HORA DE LA LLAMADA
> > > > PRODUCTO
> > > > DESCRIPCION DE LA LLAMADA
> > > >
> > > > Esta sentencia esta bien y me esta devolviendo los datos
> > > > que necesito... pero necesito que me traiga solamente los
> > > > clientes que llamaron mas de dos veces durante este rango
> > > > de fechas.
> > > >
> > > > Agradezco su amable colaboracion
> > > >
> > > > Lucho
> > > >
> >
> >
> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida