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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a