Sql BigQuery,使用线性插值填充缺少的值
我在Bigquery中有一个表,每30分钟显示一次数据,我想每5分钟显示一次数据,目前我正在使用此查询用现有值填充空值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
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…这会在有值的行之间每隔五分钟添加一行。