Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con SQL (https://www.clubdelphi.com/foros/showthread.php?t=64743)

marcial 16-04-2009 19:14:20

Ayuda con SQL
 
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
Código SQL [-]
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:

Código SQL [-]
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:

Código SQL [-]
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.
Código SQL [-]
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.


La franja horaria es GMT +2. Ahora son las 16:06:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi