【问题标题】:SQL Oracle Query self querySQL Oracle Query 自查询
【发布时间】:2015-08-03 22:41:41
【问题描述】:

我试图弄清楚如何用 1.245 填充以下 NULL 值,日期从 07-OCT-1429-SEP-14 然后从 26-SEP-1428-JUL-14 将是 1.447。

这意味着如果日期小于或等于给定日期,则使用小于给定日期的最大生效日期的值

我们可以为给定的 security_alias 和生效日期选择最后一个可用的 index_ratio 值

如何填充值?

select ab.security_alias,
ab.index_ratio,
ab.effective_date
from securitydbo.security_analytics_fi ab 
where ab.security_alias = 123627
order by ab.effective_date desc

下面应该是输出

【问题讨论】:

  • 不清楚这里的输入和预期结果是什么。
  • 不清楚下面的NULL值究竟是什么

标签: sql oracle


【解决方案1】:

假设我正确理解您的要求,我认为分析函数 LAST_VALUE() 就是您所追求的。例如:

with sample_data as (select 1 id, 10 val, to_date('01/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, null val, to_date('02/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, null val, to_date('03/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, null val, to_date('04/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, 20 val, to_date('05/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, 21 val, to_date('06/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, null val, to_date('07/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, null val, to_date('08/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, 31 val, to_date('09/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, null val, to_date('10/08/2015', 'dd/mm/yyyy') dt from dual union all
                     select 1 id, 42 val, to_date('11/08/2015', 'dd/mm/yyyy') dt from dual)
select id,
       last_value(val ignore nulls) over (partition by id order by dt) val,
       dt
from   sample_data
order by id, dt desc;

        ID        VAL DT        
---------- ---------- ----------
         1         42 11/08/2015
         1         31 10/08/2015
         1         31 09/08/2015
         1         21 08/08/2015
         1         21 07/08/2015
         1         21 06/08/2015
         1         20 05/08/2015
         1         10 04/08/2015
         1         10 03/08/2015
         1         10 02/08/2015
         1         10 01/08/2015

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2012-10-26
    • 2019-04-19
    • 2021-11-14
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多