oracle last_value 函数和预测
oracle last_value function and forecasting
我需要 return 一个结果集,其中包含我的合同、项目的最后日期的最后一个值 table;稍后我将需要使用此结果集来预测我预测的剩余月份的值。
我似乎没有任何进展,我需要获取每个项目和合同的最后日期、价值对并将其投影。
我只做了第一部分,即提取最后的日期、值;第二部分也需要帮助,即获取此结果并将其投射。
我们开始吧:
我的table
contrato,projeto,data,valor
C001 P1 01-APR-15 10
C001 P1 01-APR-15 10
C001 P1 01-MAY-15 15
C001 P2 01-MAY-15 19
C001 P2 01-JUN-15 21
C002 P1 01-JUL-15 19
C002 P2 01-AUG-15 19
我的查询
select CONTRATO,PROJETO,FCST,
LAST_VALUE("PERIODO" IGNORE NULLS)OVER (PARTITION BY contrato,projeto,FCST,periodo ORDER BY contrato,projeto,FCST RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)LAST_DATE
from(
select CONTRATO,PROJETO,periodo,
LAST_VALUE("VALOR" IGNORE NULLS)OVER (PARTITION BY contrato,projeto,periodo,valor ORDER BY PERIODO,contrato,projeto RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )FCST
FROM "HYP_STAGE"."INVENT_TABLE_FCST"
)ORDER BY CONTRATO,PROJETO,PERIODO;
我的结果集,正在重复月份的值,每个月只需要一个值;
C001 P1 10 01-APR-15
C001 P1 10 01-APR-15
C001 P1 15 01-MAY-15
C001 P2 19 01-MAY-15
C001 P2 21 01-JUN-15
C002 P1 19 01-JUL-15
C002 P2 19 01-AUG-15
非常感谢!
这是您可能需要的查询:
select distinct contrato, projeto,
last_value(periodo) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) p,
last_value(valor) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) v
from INVENT_TABLE_FCST order by contrato, projeto
对于您关于未来期间预测结果的问题的第二部分,您没有解释预测结果的含义。
If i have more variables like segments, products how wpuld the query be?
我怀疑细分市场和产品的处理方式应与 contrato 和 projecto 相同,因此您需要将这些列添加到 select ...
部分和 partition by...
部分。
但你可能想像valor
一样类比对待它们,这取决于你的需要。
Second part , need to project the last month value for another 48 months ahead(fill with the same value)
为此我们需要一些生成新周期的分层查询,这里我使用了 recursive CTE:
with data(n, contrato, projeto, periodo, valor) as (
select distinct 1, contrato, projeto,
last_value(periodo) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) periodo,
last_value(valor) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) valor
from INVENT_TABLE_FCST
union all
select n+1, contrato, projeto, add_months(periodo, 1), valor
from data where n<48 )
select contrato, projeto, periodo, valor
from data order by contrato, projeto, periodo
Perfect! It worked great!
那么为什么不将答案标记为已接受呢? ;-)
请注意:如果您的 table 中有任何主键,那就太好了,所以我们有不同的、递增的
确保分区和排序正确的值。
我需要 return 一个结果集,其中包含我的合同、项目的最后日期的最后一个值 table;稍后我将需要使用此结果集来预测我预测的剩余月份的值。 我似乎没有任何进展,我需要获取每个项目和合同的最后日期、价值对并将其投影。 我只做了第一部分,即提取最后的日期、值;第二部分也需要帮助,即获取此结果并将其投射。 我们开始吧:
我的table
contrato,projeto,data,valor
C001 P1 01-APR-15 10
C001 P1 01-APR-15 10
C001 P1 01-MAY-15 15
C001 P2 01-MAY-15 19
C001 P2 01-JUN-15 21
C002 P1 01-JUL-15 19
C002 P2 01-AUG-15 19
我的查询
select CONTRATO,PROJETO,FCST,
LAST_VALUE("PERIODO" IGNORE NULLS)OVER (PARTITION BY contrato,projeto,FCST,periodo ORDER BY contrato,projeto,FCST RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)LAST_DATE
from(
select CONTRATO,PROJETO,periodo,
LAST_VALUE("VALOR" IGNORE NULLS)OVER (PARTITION BY contrato,projeto,periodo,valor ORDER BY PERIODO,contrato,projeto RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )FCST
FROM "HYP_STAGE"."INVENT_TABLE_FCST"
)ORDER BY CONTRATO,PROJETO,PERIODO;
我的结果集,正在重复月份的值,每个月只需要一个值;
C001 P1 10 01-APR-15
C001 P1 10 01-APR-15
C001 P1 15 01-MAY-15
C001 P2 19 01-MAY-15
C001 P2 21 01-JUN-15
C002 P1 19 01-JUL-15
C002 P2 19 01-AUG-15
非常感谢!
这是您可能需要的查询:
select distinct contrato, projeto,
last_value(periodo) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) p,
last_value(valor) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) v
from INVENT_TABLE_FCST order by contrato, projeto
对于您关于未来期间预测结果的问题的第二部分,您没有解释预测结果的含义。
If i have more variables like segments, products how wpuld the query be?
我怀疑细分市场和产品的处理方式应与 contrato 和 projecto 相同,因此您需要将这些列添加到 select ...
部分和 partition by...
部分。
但你可能想像valor
一样类比对待它们,这取决于你的需要。
Second part , need to project the last month value for another 48 months ahead(fill with the same value)
为此我们需要一些生成新周期的分层查询,这里我使用了 recursive CTE:
with data(n, contrato, projeto, periodo, valor) as (
select distinct 1, contrato, projeto,
last_value(periodo) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) periodo,
last_value(valor) over (partition by contrato, projeto
order by periodo nulls first
rows between unbounded preceding and unbounded following) valor
from INVENT_TABLE_FCST
union all
select n+1, contrato, projeto, add_months(periodo, 1), valor
from data where n<48 )
select contrato, projeto, periodo, valor
from data order by contrato, projeto, periodo
Perfect! It worked great!
那么为什么不将答案标记为已接受呢? ;-)
请注意:如果您的 table 中有任何主键,那就太好了,所以我们有不同的、递增的 确保分区和排序正确的值。