これは、別のユーザー(TheSoftwareJedi)の質問に答えるときに出てきました...
次の表を考えます。
ROW_PRIORITY COL1 COL2 COL3
0 0.1 100 <NULL>
12 <NULL> <NULL> 3
24 0.2 <NULL> <NULL>
および次のクエリ:
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);
次の結果が得られます。
METRIC ROW_PRIORITY COL1 COL2 COL3
B 0 0.1 100 <NULL>
B 12 0.1 100 3
B 24 0.2 100 3
期待される:
METRIC ROW_PRIORITY COL1 COL2 COL3
B 0 0.2 100 3
B 12 0.2 100 3
B 24 0.2 100 3
もちろん問題は、col1 などの行の優先度ごとに 0.2 を取得しないのはなぜですか? LAST_VALUE は、最初に ORDER BY を実行し、次にパーティションから最後の値を選択することになっています。上記のクエリの場合、パーティションはレコードセット全体であるため、上記の予想される結果が表示されます。
誰でも説明できますか?