2014-05-21 10:48 GMT-03:00 Pedro B. Alves <pedroalve...@gmail.com>: > Estou fazendo assim: > > SELECT EXTRACT(MONTH FROM datapedido) as mes, EXTRACT(YEAR FROM > datapedido), COUNT(id) > FROM pedidos > > só que os meses que não possui pedidos ele não traz registro. >
Você pode fazer da seguinte forma: CREATE OR REPLACE FUNCTION pedidos_mes(dt_ini date, dt_fim date) RETURNS TABLE(month integer, year integer, count integer) LANGUAGE SQL AS $$ SELECT mes, ano, sum(count) FROM ( SELECT EXTRACT(MONTH FROM datapedido) AS mes, EXTRACT(YEAR FROM datapedido) AS ano, COUNT(id) AS count FROM pedidos WHERE datapedido BETWEEN dt_ini AND dt_fim GROUP BY ano, mes UNION ALL SELECT EXTRACT(MONTH FROM dt), EXTRACT(YEAR FROM dt), 0 FROM generate_series(date_trunc('month', dt_ini), date_trunc('month', dt_fim), interval '1 month'); ) t ORDER BY ano, mes GROUP BY ano, mes $$; Dessa forma você pega tudo disponível na tabela e usa o generate_series para gerar as datas (nesse caso primeiro dia de cada mês) que não estão lá. Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral