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