sql在不规则时间序列上使用配置单元进行延迟查询

vhmi4jdf  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(274)

我试图在一个不规则的时间序列上得到我的专栏的一个滞后。数据如下

time stamp (seconds), temperature
1, 20
4,12
6,13
7,18

新数据集应如下所示

time stamp (seconds), temperature, lagged_1_temperature
1, 20,0
4,12,0
6,13,0
7,18,13

正如所见,最后一行的延迟是非零的。
对于一个典型的延迟,我在spark应用程序中使用了bellow配置单元查询。 "select timestamp, value ,lag( 价值 ,1) OVER (ORDER BY timestamp) as lagged_1_value" 我可以更改上面的配置单元查询以得到我想要的结果吗

5jdjgkvh

5jdjgkvh1#

一个简单的 left join 可能更有效:

select t.*,
       coalesce(tprev.value, 0) as prev_value
from t left join
     t tprev
     on tprev.timestmp = t.timestmp - 1;
lkaoscv7

lkaoscv72#

你可以用一个 case 表情。

select t.*,
case when timestmp-coalesce(lag(timestmp,1) over(order by timestmp),0)=1 
then coalesce(lag(temperature,1) over(order by timestmp),0)
else 0 end as lagged_1_termperature
from t

相关问题