gpt4 book ai didi

sql - 不清楚 LAST_VALUE - 前面

转载 作者:行者123 更新时间:2023-12-04 14:04:46 29 4
gpt4 key购买 nike

我有一张看起来像这样的 table ,

Date                   Value
01/01/2010 03:59:00 324.44
01/02/2010 09:31:00 NULL
01/02/2010 09:32:00 NULL
.
.
.
01/02/2010 11:42:00 NULL

我希望第一个有效值出现在所有以下行中。这就是我所做的
select date, 
nvl(value, LAST_VALUE(value IGNORE NULLS) over (order by value RANGE BETWEEN 1 PRECEDING AND CURRENT ROW)) value
from
table

这根本没有区别,但如果我说 RANGE BETWEEN 3 PRECEDING AND CURRENT ROW它将数据复制到所有行。我不清楚为什么会这样。谁能解释一下我是否误解了如何使用前面?

最佳答案

分析函数仍然适用于数据集。它们一次不处理一行,您需要 PL/SQL 或 MODEL 来执行此操作。 PRECEDING指最后 X 行,但在应用分析函数之前。

这些问题在 SQL 中可能会令人困惑,因为您必须将逻辑构建到定义集合中,而不是尝试将数据从一行传递到另一行。这就是我使用 CASE 的原因与 LAST_VALUE在我的 previous answer .

编辑:

我添加了一个简单的数据集,这样我们都可以运行完全相同的查询。 VALUE1似乎对我有用,我错过了什么吗? VALUE2的部分问题是分析 ORDER BY 使用 VALUE,而不是日期。

select id, the_date, value
,last_value(value ignore nulls) over
(partition by id order by the_date) value1
,nvl(value, LAST_VALUE(value IGNORE NULLS) over
(order by value RANGE BETWEEN 1 PRECEDING AND CURRENT ROW)) value2
from
(
select 1 id, date '2011-01-01' the_date, 100 value from dual union all
select 1 id, date '2011-01-02' the_date, null value from dual union all
select 1 id, date '2011-01-03' the_date, null value from dual union all
select 1 id, date '2011-01-04' the_date, null value from dual union all
select 1 id, date '2011-01-05' the_date, 200 value from dual
)
order by the_date;

结果:
ID  THE_DATE    VALUE   VALUE1  VALUE2
1 1/1/2011 100 100 100
1 1/2/2011 100
1 1/3/2011 100
1 1/4/2011 100
1 1/5/2011 200 200 200

关于sql - 不清楚 LAST_VALUE - 前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291740/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com