| From: | H3cT0r <hector(dot)arnaldo(at)gmail(dot)com> | 
|---|---|
| To: | pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | srf procesar setof antes de mostrar el resultado | 
| Date: | 2006-03-11 16:36:26 | 
| Message-ID: | d62a87e70603110836j10c4f580l@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
hola, lista, desde ya agradecido por los consejos.
Les paso a contar mi inquietud:
tengo una tabla, la cual es cronologia con fecha y hora con la  siguiente
estructura:
legajo int4,
fecha date(),
hora time,
He realizado funcion SRF que me permite listar los datos mencionado segun el
campo legajo, un rango de fechas y un codigo de  lugar de trabajo  para
saber la asistencia y total de horas trabajadas de una persona, la funcion
es la siguiente:
create or replace function marcacion(date, date, text, text)
  RETURNS SETOF registrodiario AS
'
DECLARE
myrecord RegistroDiario;
marcacion RegistroDiario;
fecha_i alias for $1;
fecha_f alias for $2;
codalc  alias for $3;
unidad  alias for $4;
BEGIN
    For myrecord in Execute \'Select  Fecha,Hora
        from horario where legajo =\'|| codalc || \'and fechao >=\'||
quote_literal(fecha_i) || \'
        and fecha <= \'|| quote_literal(fecha_f) ||\'and codtrabaj =\'||
unidad
        order by myrecord.fecha,myrecord.hora Loop
        return next myrecord;
    end loop;
    Return ;
END
'
 LANGUAGE 'plpgsql' STABLE;
la funcion  marcacion('2005-04-01','2005-04-30','353','1'), con estos datos
tiene una salida como la siguiente:
fecha              marca
04/04/2005     13:25:04
05/04/2005     07:26:16
05/04/2005     13:29:02
06/04/2005     07:10:36
06/04/2005     13:14:11
07/04/2005     07:18:58
07/04/2005     13:10:30
08/04/2005     07:24:09
08/04/2005     13:16:30
11/04/2005     07:08:36
11/04/2005     13:32:10
12/04/2005     07:12:32
12/04/2005     10:20:15
12/04/2005     11:40:10
12/04/2005     13:11:41
La cuestion es la siguiente:
Necesito procesar los registro para que tenga una salida como la siguiente,
antes de mostrar la consulta:
fecha              marca1    marca2
04/04/2005     13:25:04    00:00:00
05/04/2005     07:26:16   13:29:02
06/04/2005     07:10:36   13:14:11
07/04/2005     07:18:58   13:10:30
08/04/2005     07:24:09   13:16:30
11/04/2005     07:08:36   13:32:10
12/04/2005     07:12:32   10:20:15
12/04/2005     11:40:10   13:11:41
He intentado tomar la información en el setof myrecord, y dentro del loop
copiarlo al setof marcacion de acuerdo a la siguiente logica
fecha_anterior := marcacion.fecha
marcacion.Fecha= myrecord.fecha
if myrecord.fecha = marcacion.Fecha then
   marcacion.marca2 := myrecord.marca1
else
  marcacion.fecha:= myrecord.fecha
  marcacion.marca1 := myrecord.marca1
end if
El caso es que no funciona, es muy probable que la logica del if pueda ser
mejorada, pero mi gran duda es si puedo hacer este tipo de control
trabajando con  con un ciclo "For in  record execute". Agradezco desde ya su
ayuda
Hector
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Jaime Casanova | 2006-03-11 17:40:40 | Re: Version de POstgresQL para win98 | 
| Previous Message | Alvaro Herrera | 2006-03-11 16:24:19 | Re: plpython |