Rafael dos Santos Ferreira escreveu:
>
>
> Eu tenho duas tabelas, produtos e saidas. A tabela de produtos tem o
> cadastro do produto
> e a tabela saida tem o total de saida mensal daquele produto.
>
> Saida:
> sai_produto integer
> sai_quantidade numeric (10,2)
> sai_valor numeric (10,2)
> sai_data date;
>
> o campo sai_data tera a ultimo dia do mes em questão.
>
> sai_produto sai_quantidade sai_valor sai_data
> 01 10,00 1,50 31/01/2007
> 01 110,00 1,50 28/02/2007
> 01 1,00 0,50 31/03/2007
>
>
>
>
> Eu precisava relacionar elas duas da seguinte maneira:
> Os produtos com as suas 5 ultimas saidas.
> A grosso modo seria mais ou menos assim:
>
>
> select * (select * from saidas where saida.sai_codpro = ??? limit 5)
> from produto
>
É difícil resolver este problema em uma expr'essão SQL. (difícil,
não impossível para casos particulares).
É mais simples utilizar uma função do tipo:
CREATE OR REPLACE FUNCTION ult_n_saidas(n integer) RETURNS SETOF
saida AS
$$
DECLARE
r_sai saida%ROWTYPE;
r_prod RECORD;
BEGIN
FOR r_prod IN SELECT DISTINCT cod_produto from produtos order
by cod_produto LOOP
FOR r_sai IN SELECT * FROM saida
WHERE sai_produto = r_prod.cod_produto
ORDER BY sai_data DESC LIMIT n LOOP
RETURN NEXT r_sai;
END LOOP;
END LOOP;
RETURN;
END;
$$ language 'plpgsql';
SELECT * FROM ult_n_saidas(5);
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral