我希望lag函数只在以前的数据可用时返回

xoefb8l8  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(520)


在这个例子中,对于6th jan lag将返回apple,但是我希望它为null,因为5th jan不见了,我需要帮助这个给我idea或者impala hive中的sql代码,我已经有了代码,但是对于6th jun它返回apple,这是lag函数的正常行为,但是我需要一个技巧,以便代码可以返回null。谢谢。

vfwfrxfs

vfwfrxfs1#

你可以使用 max() 以及 range :

select t.*,
      max(sold) over (order by date range between interval '1' day preceding and interval '1' day preceding)
from t;

这是标准sql,但不能在所有数据库中使用。所以,一个 case 表达式可能最简单:

select t.*,
       (case when lag(date) over (order by date) = date - interval '1' day
             then lag(sold) over (order by date)
        end) as prev_days_sold
from t;

众所周知,日期函数依赖于数据库,因此根据数据库的不同,语法可能略有不同。

kulphzqa

kulphzqa2#

你可以使用解析函数 first_value 具体如下:

Select date,
       first_value(sold) over (order by date 
                              range between 1 preceding and 1 preceding) as sold
  From your_table
Order by date;

相关问题