On Tue, Aug 18, 2015 at 3:29 PM, Aguiar Magalhaes <[email protected]>
wrote:
> update tabela_tot set (nome_cli, tot_ana_1_2014) =
> (select distinct (nome_cli), count(data_analise) as tot_analise from
> tabela_mov
> where date_part('MONTH', data_analise) < 7
> and date_part('YEAR', data_analise) = 2014
> and ccs <> 0
> group by nome_cli);
>
Pelo que entendi você quer atualizar para cada "nome_cli" o total. Vejo de
cara duas formas:
1. Usando sub-consulta correlacionada:
UPDATE tabela_tot AS tt
SET tot_ana_1_2014 = (
SELECT count(*) AS tot_analise
FROM tabela_mov AS tm
WHERE tm.data_analise >= '2014-01-01'
AND tm.data_analise < '2014-07-01'
AND tm.ccs <> 0
*AND tm.nome_cli = tt.nome_cli*
);
2. Usando a cláusula FROM:
UPDATE tabela_tot AS tt
SET tot_ana_1_2014 = tm2.tot_analise
FROM (
SELECT tm.nome_cli, count(*) AS tot_analise
FROM tabela_mov AS tm
WHERE tm.data_analise >= '2014-01-01'
AND tm.data_analise < '2014-07-01'
AND tm.ccs <> 0
GROUP BY tm.nome_cli
) AS tm2
*WHERE tm2.nome_cli = tt.nome_cli*
OBS1: Veja que mudei para não usar o date_part, é melhor caso tenha índice
em data_analise (o índice ideal seria (nome_cli, data_analise), não me
parece ser necessário incluir ccs).
OBS2: Não testei, verifique se roda por favor.
Atenciosamente,
--
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral