Sql BigQuery,使用线性插值填充缺少的值

Sql BigQuery,使用线性插值填充缺少的值,sql,google-bigquery,Sql,Google Bigquery,我在Bigquery中有一个表,每30分钟显示一次数据,我想每5分钟显示一次数据,目前我正在使用此查询用现有值填充空值 SELECT SETTLEMENTDATE,DUID, LAST_VALUE(SCADAVALUE ignore nulls) OVER ( PARTITION BY DUID ORDER BY SETTLEMENTDATE) AS SCADAVALUE from x 相反,可以做线性插值吗,像这样的 我有一个列结算日期是5分钟,一个列SCADAVALUEORIGI

我在Bigquery中有一个表,每30分钟显示一次数据,我想每5分钟显示一次数据,目前我正在使用此查询用现有值填充空值

SELECT
SETTLEMENTDATE,DUID,
LAST_VALUE(SCADAVALUE ignore nulls) OVER (
    PARTITION BY DUID ORDER BY SETTLEMENTDATE) AS SCADAVALUE from x
相反,可以做线性插值吗,像这样的


我有一个列结算日期是5分钟,一个列SCADAVALUEORIGIN的值是30分钟,否则它是空的,我想添加一个列SCADAINTERPOLATION,它将值均匀地分布在两个30分钟的值之间,另一个问题是,当我每5分钟刷新一次数据时,最后一个值将为空(5,10,15,20,25)分钟,我希望我的解释很清楚

我可以推测你想要这样的东西:

select timestamp_add(t.ts, interval min minute),
       (val * (30 - min) +
        lead(val) over (order by ts) * min
       ) / 30
from t cross join
     unnest(generate_array(0, 25, 5)) min;

我可以推测你想要这样的东西:

select timestamp_add(t.ts, interval min minute),
       (val * (30 - min) +
        lead(val) over (order by ts) * min
       ) / 30
from t cross join
     unnest(generate_array(0, 25, 5)) min;

下面是BigQuery标准SQL

#standardSQL
SELECT 
  TIMESTAMP_ADD(SETTLEMENTDATE, INTERVAL 5 * i MINUTE) AS SETTLEMENTDATE, 
  IF(i = 0, SCADAVALUEORIGIN, NULL) AS SCADAVALUEORIGIN,
  SCADAVALUEORIGIN AS SCADAVALUE,
  ROUND(SCADAVALUEORIGIN + IFNULL((next_value - SCADAVALUEORIGIN) / 6 * i, 0), 3) AS SCADAINTERPOLATION
FROM (
  SELECT SETTLEMENTDATE, SCADAVALUEORIGIN, 
    LEAD(SCADAVALUEORIGIN) OVER(ORDER BY SETTLEMENTDATE) next_value,
  FROM `project.dataset.table`
), UNNEST(GENERATE_ARRAY(0, 5)) i 
如果要应用于您问题中的样本数据-结果为


下面是BigQuery标准SQL

#standardSQL
SELECT 
  TIMESTAMP_ADD(SETTLEMENTDATE, INTERVAL 5 * i MINUTE) AS SETTLEMENTDATE, 
  IF(i = 0, SCADAVALUEORIGIN, NULL) AS SCADAVALUEORIGIN,
  SCADAVALUEORIGIN AS SCADAVALUE,
  ROUND(SCADAVALUEORIGIN + IFNULL((next_value - SCADAVALUEORIGIN) / 6 * i, 0), 3) AS SCADAINTERPOLATION
FROM (
  SELECT SETTLEMENTDATE, SCADAVALUEORIGIN, 
    LEAD(SCADAVALUEORIGIN) OVER(ORDER BY SETTLEMENTDATE) next_value,
  FROM `project.dataset.table`
), UNNEST(GENERATE_ARRAY(0, 5)) i 
如果要应用于您问题中的样本数据-结果为


抱歉,我更新了标题样本数据和所需结果,作为问题中的文本表会有所帮助。如果您显示缺少哪些值并解释如何计算这些值,也会有所帮助。抱歉,我更新了标题样本数据和所需结果,作为问题中的文本表会有所帮助。如果您显示了什么,也会有所帮助缺少值,并解释了如何计算它们。抱歉,我添加了更好的解释,我hope@Mim…如果您只筛选到有值的行,这应该可以满足您的需要。没有值的行如何?@Mim…这会在有值的行之间每隔五分钟添加一行。对不起,我添加了一个更好的解释是的,我hope@Mim…如果您只是向下筛选到有值的行,这应该可以满足您的需要。没有值的行如何?@Mim…这会在有值的行之间每隔五分钟添加一行。