如何对SQLtable中的空值进行线性插值?

How to undertake linear interpolation of null values in a SQL table?

我在 Databricks 中有一个 Spark SQL table,它具有以下形式的缺失值(null):

date         price        stock       item_code
2020-01-01   17.99        6           01
2020-01-02   17.99        null        01
2020-01-03   17.99        4           01
2020-01-04   17.99        null        01
2020-01-01   11.59        null        02
2020-01-02   11.59        8           02
2020-01-03   11.59        null        02
2020-01-04   11.59        4           02

对于每个 item_code,我有相同范围 date 的数据。 stock 列可能会出现报告错误和缺失值。有时,这些缺失值出现在日期范围的 start/end。

如果某个项目具有前后期间的值,我想使用前后记录值的简单平均值来插入空值。当缺失值位于日期范围的开始或结束时,我想为该 item_code 填充第一个或最后一个可用的 stock 值。我的objectivetable是这样的:

date         price        stock       item_code
2020-01-01   17.99        6           01
2020-01-02   17.99        5           01
2020-01-03   17.99        4           01
2020-01-04   17.99        4           01
2020-01-01   11.59        8           02
2020-01-02   11.59        8           02
2020-01-03   11.59        6           02
2020-01-04   11.59        4           02

我想我可以使用 window 函数来计算 before/after 周期的平均值,但我不确定如何构建 window。如有任何建议,我们将不胜感激。

ANALYTICAL FUNCTION 应该可以解决这个问题:

SELECT 
   date, 
   price,
   CASE
    WHEN stock Is NULL then AVG(stock) OVER( PARTITION BY item_code ORDER BY item_code, date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
    ELSE stock
   END AS stock, 
   item_code
FROM t
ORDER BY item_code, date

DEMO