我在Hive里有一张table,内容如下
+---+----------+----------+----------+--------+
| pk| from_d| to_d| load_date| row_num|
+---+----------+----------+----------+--------+
|111|2019-03-03|2019-03-03|2019-03-03| 1|
|111|2019-02-02|2019-02-02|2019-02-02| 2|
|111|2019-01-01|2019-01-01|2019-01-01| 3|
|222|2019-03-03|2019-03-03|2019-03-03| 1|
|222|2019-01-01|2019-01-01|2019-01-01| 2|
|333|2019-02-02|2019-02-02|2019-02-02| 1|
|333|2019-01-01|2019-01-01|2019-01-01| 2|
|444|2019-02-02|2019-02-02|2019-02-02| 1|
|555|2019-03-03|2019-03-03|2019-03-03| 1|
+---+----------+----------+----------+--------+
现在我想更新 to_d
列中的行数大于1,使用如下条件
when row_num = 2 then to_d column should have row_num 1 row's from_d - 1 day
when row_num = 3 then to_d column should have row_num 2 row's from_d - 1 day
and so on
if row_num =1 then to_d should not be updated
请不要误解我的意思,我只是想帮助另一个用户根据配置单元表中的其他表值更新列值
我曾尝试过这种方法,但我无法从这里走得更远
2条答案
按热度按时间hivapdat1#
可以使用if条件对问题进行排序。。。让我举个例子。选择from_d,to_d,row_num,if(row_num=1,1,row_num-1)。。。因此,每当行数大于1时,您的行数就会减去1。希望你满意。
doinxwow2#
你可以用
LAG
功能如下这会给你想要的结果