Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Valor maximo de una consulta (https://www.clubdelphi.com/foros/showthread.php?t=88648)

wilcg 09-07-2015 22:26:20

Valor maximo de una consulta
 
Hola,
Quiero obtener el valor máximo de un campo de una tabla, pero teniendo en cuenta lo siguiente:

- el numero de DNI del cliente.
- el pago mas alto que se realizo.

Código SQL [-]
CREATE TABLE pagos
(
  CODIGO Integer NOT NULL,
  DNI Varchar(15),
  PAGO Decimal(9,2) DEFAULT 0,
  ... .....
  .....
  PRIMARY KEY (CODIGO)
);

suponemos que se crea un registro por cada pago, quiero encontrar el pago mas alto que realizo un cliente?
y mostrarlo en un EDIT. la base de datos que uso es firebird.

ecfisa 09-07-2015 23:23:47

Hola wilgc.

¿ Con que gestor de base de datos estas trabajando ?

Saludos :)

Casimiro Notevi 09-07-2015 23:31:44

Código SQL [-]
select max(pago) from pagos where dni= :eldni

wilcg 10-07-2015 05:25:40

Gracias ecfisa, gracias casimiro.
siguiendo el ejemplo de casimiro esta funcionando de esta manera.

Código Delphi [-]
  with Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('Select Max(pago) as pago From Pagos');
    SQL.Add('Where dni = ' + edtDNI.Text);
    Open;
    Edit1.Text := FormatFloat('###,##0.00', FieldByName('pago').AsInteger);
  end;

ecfisa 10-07-2015 06:01:50

Hola wilcg.

Me alegro que lo hayas solucionado :).

El motivo de mi pregunta fue, por que había interpretado que no tenías el valor DNI y deseabas obtener ambos valores (DNI y PAGO) de la fila cuya columna VALOR tuviera el valor mayor.

Y en ese caso, la sintáxis varia de acuerdo al gestor que estes usando, vg. Firebird:
Código SQL [-]
SELECT FIRST 1 DNI, MAX(PAGO) AS MAXIMO
FROM PAGOS
GROUP BY DNI
ORDER BY MAXIMO DESC
MySQL:
Código SQL [-]
SELECT DNI, MAX(ID) AS MAXIMO
FROM PAGOS
GROUP BY DNI
ORDER BY MAXIMO DESC
LIMIT 1
Access:
Código SQL [-]
SELECT TOP 1 DNI, MAX(PAGO) AS MAXIMO
FROM PAGOS
GROUP BY DNI 
ORDER BY 2 DESC

...

Indudablemente Casimiro entendió a primeras la índole de tu consulta ^\||/

Saludos :)

AgustinOrtu 10-07-2015 06:03:16

Que tal wilcg, una simple recomendacion mas que solemos hacer, siempre que sea posible utiliza parametros en tus consultas SQL

En tu caso quedarias asi:

Código Delphi [-]
  with Query1 do
  begin
    Close;
    SQL.Text := ' SELECT MAX(Pago) AS Pago FROM Pagos WHERE DNI = :FDNI ';
    ParamByName('FDNI ').Value := edtDNI.Text; 
    // si usas ADO es asi
    Parameters.ParamByName('FDNI ').Value := edtDNI.Text; 
    Open;
    Edit1.Text := FormatFloat('###,##0.00', FieldByName('pago').AsInteger);
  end;

Saludos

ecfisa 10-07-2015 06:16:41

Cita:

Empezado por AgustinOrtu (Mensaje 494248)
Que tal wilcg, una simple recomendacion mas que solemos hacer, siempre que sea posible utiliza parametros en tus consultas SQL

¡Totalmente! y no es sólo un tema de eficiencia y prolijidad, sino que es la vía segura para evitar esto.

Saludos :)

wilcg 10-07-2015 07:23:40

ecfisa, AgustinOrtu gracias por las recomendaciones excelentes aportes, hay mucho por aprender de ustedes ^\||/.


La franja horaria es GMT +2. Ahora son las 02:25:50.

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