如果以前的数据可用,我希望滞后功能仅 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;
在这个例子中,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;