Dado o seguinte esquema
CREATE TEMP TABLE tmp_table
(
id_bucket int2 NOT NULL,
id_property int2 NOT NULL,
v1 varchar(320) NOT NULL,
v2 varchar(320) NULL
);
E os seguintes dados
id_bucket id_property v1 v2
------------------------------
1 3 OT A
1 8 RO C
1 2 OT C
1 1 RT D
1 5 OT C
1 4 OT C
Eu gostaria que todas as linhas que tivessem os mesmos valores para v1 e v2 (neste caso v1 = OT, v2 = C) fossem atualizadas com um valor para v2 de NULL
exceto um, independentemente .
Tentei agrupar pelos meus critérios, mas perdi os detalhes das linhas em questão. Sei id_property
que provavelmente será útil, mas ao usar GROUP BY's, não tenho acesso a essa coluna.
Eu tenho puxado meu cabelo por um tempo sobre este. Alguma ideia ?
Sua solução são funções analíticas, também conhecidas como funções de janela .
Resulta em
Veja o DB-fiddle para um exemplo completo .
O benefício de uma solução baseada em funções de janela é que a tabela subjacente é selecionada apenas uma vez, enquanto soluções comparáveis baseadas em group by geralmente precisam selecionar a tabela pelo menos uma segunda vez. Isso torna as funções da janela muito mais eficientes. Claro, isso só é realmente relevante quando a mesa fica grande.