Da Oracle Analytics - divisórias e ordenação de consultas SQL
-
06-07-2019 - |
Pergunta
Este veio ao responder de outro usuário questão (TheSoftwareJedi) ...
Dada a tabela a seguir:
ROW_PRIORITY COL1 COL2 COL3
0 0.1 100 <NULL>
12 <NULL> <NULL> 3
24 0.2 <NULL> <NULL>
e a seguinte consulta:
select 'B' METRIC, ROW_PRIORITY,
last_value(col1 ignore nulls) over (ORDER BY ROW_PRIORITY) col1,
last_value(col2 ignore nulls) over (ORDER BY ROW_PRIORITY) col2,
last_value(col3 ignore nulls) over (ORDER BY ROW_PRIORITY) col3
from (SELECT * FROM ZTEST);
Eu recebo estes resultados:
METRIC ROW_PRIORITY COL1 COL2 COL3
B 0 0.1 100 <NULL>
B 12 0.1 100 3
B 24 0.2 100 3
ESPERADOS:
METRIC ROW_PRIORITY COL1 COL2 COL3
B 0 0.2 100 3
B 12 0.2 100 3
B 24 0.2 100 3
A questão é, naturalmente, por que não posso obter 0,2 para cada prioridade linha em col1, etc? LAST_VALUE é suposto para executar a ORDER BY em primeiro lugar e, em seguida, escolher o último valor a partir da partição. No caso da consulta acima, a partição é todo o conjunto de registros por isso gostaria de ver os meus resultados esperados anteriormente.
Alguém pode explicar?
Solução
quando você incluir um ORDER BY na cláusula Partitioning, você pode incluir uma cláusula de janelas para ser explícito.
Se você quiser que essas LAST_VALUES ser sobre todas as linhas, você deve incluir isso após a sua encomenda por:
linhas entre SEGUINTE ANTERIOR UNBOUNDED E UNBOUNDED
Isso deve resolver sua consulta.
Mais detalhes dos docs:
Se você não especificar uma linha ou uma cláusula RANGE, o tamanho da janela é determinada da seguinte forma:
- Se uma cláusula ORDER BY é especificado, a janela começa com a primeira linha na partição (UNBOUNDED anterior) e termina com a linha atual (CURRENT ROW).
- Se uma cláusula ORDER BY não for especificado, a janela começa com a primeira linha na partição (UNBOUNDED anterior) e termina com última linha na partição (seguindo UNBOUNDED).