On Tue, Aug 18, 2015 at 3:29 PM, Aguiar Magalhaes <maga...@yahoo.com.br>
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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to