2009/7/30 emerson hermann <[email protected]>:
> Ola Lista!
>
> Tenho que auditar uma base de dados, e estou com o seguinte problema:
>
> Como fazer uma query para o calculo (diferença entre entrada e saida
> do usuario) data e hora de entrada e de saida do usuario no sistema
> conforme modelagem abaixo?
>
> Desenvolver uma Store Procedure seria a melhor solucao ?
>
> Segue estrutura exemplo da base de dados, abaixo:
>
> -- Versao do PostgreSQL
> SELECT VERSION();
> PostgreSQL 8.3.0 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2
>
> -- Estrutura da Tabela
>
> tb_log_acessos
> id_acesso integer not null default
> nextval('tb_log_acessos_id_acesso_seq'::regclass)
> fk_usuario integer
> login character varying(77) not null
> fk_cliente integer
> data timestamp without time zone default now()
> tipo character(1)
>
> Índices:
> "tb_log_acessos_pkey" PRIMARY KEY, btree (id_acesso)
> Restrições de verificação:
> "define_entrada_saida" CHECK (tipo = ANY (ARRAY['E'::bpchar, 'S'::bpchar]))
> Restrições de chave estrangeira:
> "tb_log_acessos_fk_cliente_fkey" FOREIGN KEY (fk_cliente)
> REFERENCES tb_clientes(id_cliente) ON DELETE RESTRICT
> "tb_log_acessos_fk_usuario_fkey" FOREIGN KEY (fk_usuario)
> REFERENCES tb_usuarios(id_usuario) ON DELETE SET NULL
>
> -- listagem dos dados
> SELECT *
> FROM tb_log_acessos;
>
> id_acesso | fk_usuario | login | fk_cliente | data | tipo
> 10312 1 bug 1 01/06/2007 03:29:28 E
> 10315 1 bug 1 01/06/2007 03:31:32 S
> 74929 1 bug 1 01/10/2007 02:59:02 E
> 74930 1 bug 1 01/10/2007 02:59:35 S
> 40171 1 bug 1 02/08/2007 10:44:37 E
> 40172 1 bug 1 02/08/2007 10:48:09 S
> 24340 1 bug 1 03/07/2007 03:30:01 E
> 24344 1 bug 1 03/07/2007 03:32:44 S
> 24345 1 bug 1 03/07/2007 03:33:06 E
>
Talvez algo do tipo:
SELECT *,age(la2.data,la1.data)
FROM tb_log_acessos la1 JOIN tb_log_acessos la2
ON (la1.fk_usuario = la2.fk_usuario)
WHERE la1.tipo = 'E' AND la2.tipo = 'S'
AND la1.data = (SELECT max(la3.data) FROM tb_log_acessos la3
WHERE la3.data < la2.data AND la3.tipo = 'E');
Pelos dados apresentados não foi possível depreender quais atributos
usar no critério da junção.
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral