Ver Mensaje Individual
  #1  
Antiguo 16-11-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Reputación: 19
ElDioni Va por buen camino
Subconsulta con clientes sin comprar en un período de tiempo

Hola, estoy teniendo problemas con esta subconsulta que quiero hacer y que no consigo resolver, a ver si me podeis echar una mano, os explico el problema.

Tengo una tabla con datos de clientes:

Cita:
CodCli:texto;
NomCli:texto;
y otra con facturas:

Cita:
CCodCli:texto;
Factura:Número;
Fecha:Fecha;
Precio:Número;
Lo que yo quiero obtener son los clientes que llevan 6 meses sin facturar pero que sus últimas compras esten recogidas en los últimos 12 meses. Por lo que los clientes que llevan más de 1 año sin comprar no saldrían (esto es para que no salgan los clientes del 2000, 2001, etc).

Al principio había puesto algo como esto:
Código SQL [-]
SELECT Clientes.* FROM Clientes WHERE clientes.codcli IN (SELECT DISTINCT CCODCLI FROM Facturas WHERE Fecha<#'+datetostr(now-(strtoint(TxtMesesSin.Text)*30))+'# AND fecha>#'+datetostr(now-(strtoint(txtMesesRango.text)*30))+'#)

El campo TxtMesesSin es donde se introducen los meses sin comprar, por defecto 6, y en TxtMesesRango se introduce el espacio de tiempo que se quiere tener en cuenta, por defecto 12.
Al ponerlo de esta forma lo que ocurre es que me saca clientes que han seguido comprando porque tienen facturas que cumplen la condición pero también otras más actuales.
Luego he puesto lo siguiente:

Código SQL [-]
SELECT clientes.* FROM clientes WHERE clientes.codcli IN (SELECT DISTINCT CCODCLI,max(fecha) as fecha FROM Facturas WHERE Fecha<#'+datetostr(now-(strtoint(TxtMesesSin.Text)*30))+'# AND Fecha>#'+datetostr(now-(strtoint(txtMesesRango.text)*30))+'# GROUP BY CCODCli)

Pero por lo visto no pueden aparecer dos campos en la subconsulta y me lanza un error diciendome que debería utilizar exists, pero por lo que he leido exists solo manda true o false a la consulta principal.

Espero sus noticias.

Gracias y saludos.
Responder Con Cita