Je vais simplifier le problème, autant que possible:Comment compresser ce jeu de résultats Oracle en valeurs en fonction de la priorité de ligne, en ignorant les valeurs NULL?
J'ai une table d'oracle:
row_priority, col1, col2, col3
0, .1, 100, {null}
12, {null}, {null}, 3
24, .2, {null}, {null}
Résultat souhaité:
col1, col2, col3
.2, 100, 3
Ainsi, selon la priorité de la ligne, il remplace les valeurs de ligne précédentes, si elles sont indiquées.
je tente de trouver une solution en utilisant des fonctions analytiques sur la table, mais il se comporte pas seulement ...
J'essaie:
select last_value(col1 ignore nulls) over() col1,
last_value(col2 ignore nulls) over() col2,
last_value(col3 ignore nulls) over() col3
from (select * from THE_TABLE order by row_priority)
where rownum = 1
ou l'inverse:
select first_value(col1 ignore nulls) over() col1,
first_value(col2 ignore nulls) over() col2,
first_value(col3 ignore nulls) over() col3
from (select * from THE_TABLE order by row_priority desc)
where rownum = 1
Et aucun ne semble ignorer les valeurs NULL. Des indices?
Voir une discussion supplémentaire que j'ai commencé concernant la nature de la commande avec analyse: http://stackoverflow.com/questions/262278/oracle-analytics-partitions-and-ordering-of-sql-queries. Pendant que vos modifications fonctionnent dans ce cas, vous devez toujours commander dans la clause de partition. – ScottCher
Je ne suis pas d'accord sur la commande dans la clause de partition, bien que j'aimerais voir le plan. Mes résultats sont déjà commandés et je profite de fonctionnalités documentées. Je ne voudrais pas le réorganiser 3 fois. – TheSoftwareJedi