【问题标题】:How fill NULLs with previous value in SQL如何在 SQL 中用以前的值填充 NULL
【发布时间】:2021-04-19 12:29:33
【问题描述】:

我有下表

price 列中有一些 NULL 值,我想将其替换为之前的日期值(日期为 manual_date)。此外,price 列是在不同日期(calculation_table)计算的,因此应根据此组过滤器填充空值。 final output 应该显示类似于output_price 的值。 我发现here 一个代码做同样的事情,但是,我不知道如何处理我的数据(其中一个错误说我在(PARTITION BY symbol ORDER BY ts) 中没有 ts。这是真的,但在网站上, 也没有指定 ts + 我试图用 manual_date 替换它 ts)

我为我的数据尝试了以下代码

select manual_date,TS_FIRST_VALUE(price, 'const') output_price
from MYDATA
TIMESERIES manual_date AS '1 month' 
OVER(PARTITION BY calculation_date ORDER BY ts)  --tried also ORDER BY manual_date 

【问题讨论】:

  • 请说明您如何定义“以前的”。

标签: sql vertica


【解决方案1】:

垂直支持IGNORE NULLS 上的last_value()。所以你可以使用:

last_value(price ignore nulls) over (
    order by manual_date
    rows between unbounded preceding and current row
   ) as output_price

【讨论】:

  • 是的,如果只有一个calculation_date,它就可以工作。但是,如果 calculation_date 的顺序不同(如 04.01.2021、05.11.2020、05.11.2020、04.01.2021 ...),则第一个 05.11.2020 值(如果缺少)可以成为前一个2021 年 1 月 4 日的价值。如果一开始我按calculation_date,manual_date 排序数据,会解决问题吗?还是应该有一种使用方式的分区?
  • @PriitMets 。 . .您必须使用定义“以前”的列。请注意,这使用manual_date,而不是calculation_date,因为这是您问题中唯一明显的此类列。
  • 我怎样才能将calculation_date 添加为标识先前值的列?因为calculation_date 显示了2 个不同的组,并且这两个组对于相同的manual_date 具有不同的值,如果仅基于manual_date 取先前的值,那么这两个组的值可能是错误的
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多