PDA

Ver la Versión Completa : Ayuda con SQL


marcial
16-04-2009, 19:14:20
Hola a todos y gracias por anticipado:

Trabajo con D5 y Paradox

Necesito hacer el siguiente query:
Quiero saber que clientes no vienen por el concesionario desde una determinada fecha.
Tengo un fichero de cabeceras donde guardo el CodCliente,NombreCliente,FechaVisita e Importe. Si la fecha de comparación fuera por ejemplo 25.11.2008 y los registros fueran:
Cliente Nombre Fecha Importe
1 Juan 10.11.2008 1000,00
2 Pedro 20.02.2009 200,00
1 Juan 17.02.2009 400,00
3 Jose 05.11.2008 500,00

en el query solo tendría que aparecer
3 Jose 05.11.2008 500,00

No se cómo se utilizan los querys anidados, ni si es el sisteme mejor, el caso es que me gustaría hacerlo con un solo query.

Gracias a todos por vuestra ayuda
Marcial

droguerman
16-04-2009, 19:26:06
Disculpa lo simplista de mi respuesta pero no bastaria un
select Cliente from tabla
group by Cliente Having MAX(fecha) < :fecha;

marcial
16-04-2009, 20:04:59
Creo que no bastaria porque si un cliente tiene dos registros con fechas, una anterior a la fecha de corte y otra posterior, ese cliente NO debería de salir porque tiene una posterior a la fecha de corte. Necesito solo aquellos clientes que entre todos sus registros ninguno sea posterior a la fecha de corte. Pero de todas formas gracias por tu interés

Caro
16-04-2009, 21:58:55
Hola marcial, prueba esta consulta:


Select C1.* From concesionario C1
Left Join (Select * From concesionario Where fecha>='11/25/2008') C2
on (C1.cliente=C2.cliente)
Where C2.cliente is null


Saluditos

marcial
17-04-2009, 10:23:21
Hola Caro.

He puesto esto:

Query1.SQL.Add('Select C1.* From CABECERAS C1');
Query1.SQL.Add('Left Join (Select * From CABECERAS Where fecha>=' + '"' + '11/25/2008' + '"''');
Query1.SQL.Add(' C2 on (C1.cliente=C2.cliente)');
Query1.SQL.Add('Where C2.CodCliente is null');

y el error es "Invalid use of token "select" in linea 2"

pero gracias de todas formas.

marcial
17-04-2009, 10:55:31
Hola Drogerman:
He puesto esto y me da el error Type Mismatch in expression.

Query1.Active := False;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select Documento,MAX(Fecha),Codcliente,NombreCliente from CABECERAS.DB');
Query1.SQL.Add(' GROUP BY CodCliente,Fecha,NombreCliente,Documento Having MAX(Fecha) > ' + '"' + DateToStr(FechaCorte) + '"');

Query1.Active := True;


"FechaCorte" es una variable TDate y el Campo "Fecha" del fichero es Date.

Intaré ver si lo soluciono pero no se donde la expresion falla. De todas formas muchas gracias.

marcial
17-04-2009, 11:19:14
Perdon, ya se donde falla la expresión. Es que yo tenia DD/MM/AAAA y era MM/DD/AAAA.
Gracias.