如果以前的数据可用,我希望滞后功能仅 return

I want lag function to only return if previous data is available

在这个例子中,1 月 6 日的滞后将 return 苹果,但我希望它为空,因为 1 月 5 日不见了,我需要帮助给我想法或 sql [中的代码=16=] hive,我已经有了代码,但是对于 6 月 6 日,它是 returns apple,这是滞后函数的正常行为,但我需要一个技巧,以便代码可以 return null。谢谢

您可以使用 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;

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

您可以使用解析函数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;