在这个例子中,对于6th jan lag将返回apple,但是我希望它为null,因为5th jan不见了,我需要帮助这个给我idea或者impala hive中的sql代码,我已经有了代码,但是对于6th jun它返回apple,这是lag函数的正常行为,但是我需要一个技巧,以便代码可以返回null。谢谢。
vfwfrxfs1#
你可以使用 max() 以及 range :
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 表达式可能最简单:
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;
众所周知,日期函数依赖于数据库,因此根据数据库的不同,语法可能略有不同。
kulphzqa2#
你可以使用解析函数 first_value 具体如下:
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;
2条答案
按热度按时间vfwfrxfs1#
你可以使用
max()
以及range
:这是标准sql,但不能在所有数据库中使用。所以,一个
case
表达式可能最简单:众所周知,日期函数依赖于数据库,因此根据数据库的不同,语法可能略有不同。
kulphzqa2#
你可以使用解析函数
first_value
具体如下: