SQL使用最后观察到的值填充nan

SQL使用最后观察到的值填充nan,sql,window-functions,Sql,Window Functions,编写SQL查询,用最后一个已知值填充值列NAN。SQLite 客户识别码 日期 价值 1. 14.04.2020 10000 1. 15.04.2020 5000 1. 16.04.2020 楠 1. 17.04.2020 楠 1. 18.04.2020 楠 2. 14.04.2020 250000 2. 15.04.2020 250000 2. 16.04.2020 230000 2. 17.04.2020 230000 2. 18.04.2020 225000 3. 14.04.2020 5

编写SQL查询,用最后一个已知值填充值列NAN。SQLite

客户识别码 日期 价值 1. 14.04.2020 10000 1. 15.04.2020 5000 1. 16.04.2020 楠 1. 17.04.2020 楠 1. 18.04.2020 楠 2. 14.04.2020 250000 2. 15.04.2020 250000 2. 16.04.2020 230000 2. 17.04.2020 230000 2. 18.04.2020 225000 3. 14.04.2020 50000 3. 15.04.2020 楠 3. 16.04.2020 楠
从“NaN”的用法我猜你在使用Postgres

不幸的是,Postgres不支持窗口函数上的忽略NULL选项。一种方法是将一个组分配给数字,然后为该组输入值:

select t.*,
       max(nullif(value, 'NaN')) over (partition by grp) as imputed_value
from (select t.*,
             count(value) filter (where value <> 'NaN') over (partition by client_id order by date) as grp
      from t
     ) t
或使用横向连接:

select t.*, t2.value as imputed_value
from t cross join lateral
     (select t2.value
      from t t2
      where t2.client_id = t.client_id and
            t2.date <= t.date and
            t2.value <> 'NaN'
      order by t2.date desc
      limit 1
     ) t2;

是一个数据库。用你正在使用的数据库标记你的问题。很好。但第一种方法在添加多个客户机id时出错。另外,我使用SQLite来完成此任务,而不是Postgres,我忘了说。
select t.*, t2.value as imputed_value
from t cross join lateral
     (select t2.value
      from t t2
      where t2.client_id = t.client_id and
            t2.date <= t.date and
            t2.value <> 'NaN'
      order by t2.date desc
      limit 1
     ) t2;