Eu tenho uma tabela simples odd_nums
com colunas num
e odd
:
create table odd_nums
(
num numeric,
odd numeric
);
INSERT INTO odd_nums VALUES (0, 0);
INSERT INTO odd_nums VALUES (1, 1);
INSERT INTO odd_nums VALUES (2, 0);
INSERT INTO odd_nums VALUES (3, 1);
Estou brincando com funções de janela. Esta consulta produz os resultados esperados:
SELECT num,
FIRST_VALUE(num) OVER (PARTITION BY odd) a,
FIRST_VALUE(num) OVER (PARTITION BY odd) b
FROM odd_nums;
número | a | b |
---|---|---|
0 | 0 | 0 |
2 | 0 | 0 |
1 | 1 | 1 |
3 | 1 | 1 |
Quando ordeno a partição em coluna, b
os resultados mudam assim:
SELECT NUM,
FIRST_VALUE(num) OVER (PARTITION BY odd) a,
FIRST_VALUE(num) OVER (PARTITION BY odd ORDER BY num DESC) b
FROM odd_nums;
número | a | b |
---|---|---|
2 | 2 | 2 |
0 | 2 | 2 |
3 | 3 | 3 |
1 | 3 | 3 |
Coluna b
é o que eu esperaria, mas por que a coluna a
também está mudando?
Alguém pode me ajudar a entender por que adicionar a ORDER BY num DESC
cláusula na função da segunda janela causa uma alteração na função da primeira janela? Existe algum detalhe específico de implementação ou otimização do banco de dados que possa estar afetando o resultado?
Examinei a documentação do PostgreSQL, mas sem sucesso.