Era isso mesmo que eu precisava. So uma duvida que tipo de operador é o %ROWTYPE?
obrigado Em 23/01/08, Osvaldo Rosario Kussama <[EMAIL PROTECTED]> escreveu: > > 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 >
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral