Sco*_*her 3 oracle analytic-functions
在回答另一个用户的问题(TheSoftwareJedi)时出现了这个问题 ......
鉴于下表:
ROW_PRIORITY COL1 COL2 COL3
0 0.1 100 <NULL>
12 <NULL> <NULL> 3
24 0.2 <NULL> <NULL>
Run Code Online (Sandbox Code Playgroud)
以及以下查询:
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);
Run Code Online (Sandbox Code Playgroud)
我得到这些结果:
METRIC ROW_PRIORITY COL1 COL2 COL3
B 0 0.1 100 <NULL>
B 12 0.1 100 3
B 24 0.2 100 3
Run Code Online (Sandbox Code Playgroud)
预期:
METRIC ROW_PRIORITY COL1 COL2 COL3
B 0 0.2 100 3
B 12 0.2 100 3
B 24 0.2 100 3
Run Code Online (Sandbox Code Playgroud)
问题当然是,为什么我不能在col1等中获得每行优先级0.2?LAST_VALUE应首先执行ORDER BY,然后从分区中选择最后一个值.在上面的查询的情况下,分区是整个记录集,所以我将看到我上面的预期结果.
谁能解释一下?
小智 5
当您在Partitioning子句中包含ORDER by时,可以包含一个显式的窗口子句.
如果您希望这些LAST_VALUES遍布所有行,则应在Order By之后包含此行:
无界先行与无界之间的行
这应该可以解决您的疑问.
来自文档的更多细节:
如果未指定ROW或RANGE子句,则窗口大小确定如下:
| 归档时间: |
|
| 查看次数: |
1580 次 |
| 最近记录: |