Hive sql循环通过表比较值

时间:2018-03-27 19:49:19

标签: sql hive

我在hive中有一个表格,如下所示

fruit           value
apple           2
apple           3
apple           4
plum            2
plum            3
plum            4

我想循环遍历表并比较之前的值和水果,并根据循环创建一个新列(总计)。这将是逻辑

if [fruit] = previous[fruit] then total = prev[fruit]

新表应如下所示

fruit       value      total
apple       2    
apple       3          2
apple       4          3
plum        2        
plum        3          2
plum        4          3

如何在Hive中使用SQL实现此目的? 此外,我已在我的查询中对结果进行了排序,因此按水果和升序值分组

2 个答案:

答案 0 :(得分:1)

SQL表代表无序集。没有"之前"除非列指定排序。假设您有这样一个列,那么您可以使用lag()

select t.*,
       lag(value) over (partition by fruit order by ?) as prev_value
from t;

?用于指定排序的列的名称。

答案 1 :(得分:1)

添加到上一个答案,您可以通过写入如下的临时表来人为地创建订单:

create table #holding (rowid int identity, fruit varchar(max), value int)
insert #holding
select fruit, value from your table
order by fruit, value

这将重新创建原始表格中的顺序,并允许您执行Gordon上面所说的