PDA

Ver la Versión Completa : select max


yossi
06-06-2010, 17:48:31
hola, tengo 1 query con esta sentencia

select max(fecha)
from personas
where personas_id=:id;

lo que quiero hacer en tomar el campo fecha del ultimo registro de ese id, y asignarselo a un datetimepicker, pero si en la tabla personas no hay ningun registro que me tome la fecha actual.

if query1.isempty then
datetimepicker.date:=now;
else
datetimepicker.date:=query1.fields[0].value;

el problema es que me dice que la funcion max no puede retornar null y no se como hacer la consulta y como hacerla asignacion:(

marcoszorrilla
06-06-2010, 18:19:04
Creo que lo mejor sería ejecutar primero:

select Count(fecha)
from personas
where personas_id=:id;


if query1.Fields[0].AsInteger = 0 then
datetimepicker.date:=now;
else
datetimepicker.date:=query1.fields[0].value;

Si te devuelve 0 registros sabes que resultaría "null" y sino prosigues.

Un Saludo.

yossi
07-06-2010, 00:00:54
hola marcos, eso me ayudo pero no resuelve mi problema a lo mejor no me explique bien, voy de nuevo

necesito seleccionar la fecha mas actual de una tabla que concuerde con un id, es decir en la tabla tengo estos registros que concuendan con el id

id=1

2008-03-04
2008-06-03
2009-12-04

yo necesito que la consulta me devuelva el valor 2009-12-04 y lo coloque en un datetimepicker y en caso que digamos no existan registros asociados al id=1 coloque la fecha actual en el datetimepicker

marcoszorrilla
07-06-2010, 06:51:17
Al ejecutar la primera sentencia que te puse, sabes si hay alguna fecha o no, sino hay fechas das mensaje diciendo que no hay registros que cumplan con la consulta, es decir que si sigues en este caso obtendrías "null" y te daría error si te resulta que hay registros, entonces ejecutas la consulta con Max.

Un Saludo.

olbeup
07-06-2010, 09:32:32
Mira si esto te sirve:

procedure TForm1.Button1Click(Sender: TObject);
begin
if ADOConnection1.Connected then
ADOConnection1.Close;

with ADOQuery1 do
begin
SQL.Clear;

SQL.Add('SELECT');
SQL.Add(' MAX(FECHA) AS ULTIMAFECHA
SQL.Add(' FROM Personas
SQL.Add(' WHERE PERSONAS_ID = 1');

Open;
end;

with ADOQuery1.DataSource.DataSet do
if FieldByName('ULTIMAFECHA').IsNull then
DateTimePicker1.Date := now
else
DateTimePicker1.Date := FieldByName('ULTIMAFECHA').AsDateTime;
end;
Un Saludo

olbeup
07-06-2010, 09:34:07
Perdón, faltan las comillas del final de la sql:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ADOConnection1.Connected then
ADOConnection1.Close;

with ADOQuery1 do
begin
SQL.Clear;

SQL.Add('SELECT');
SQL.Add(' MAX(FECHA) AS ULTIMAFECHA');
SQL.Add(' FROM Personas');
SQL.Add(' WHERE PERSONAS_ID = 1');

Open;
end;

with ADOQuery1.DataSource.DataSet do
if FieldByName('ULTIMAFECHA').IsNull then
DateTimePicker1.Date := now
else
DateTimePicker1.Date := FieldByName('ULTIMAFECHA').AsDateTime;
end;
Un saludo

yossi
08-06-2010, 23:00:12
muchas gracias a ambos me sirvio de mucho su respuesta ;)