配置单元sql通过表循环比较值

cbeh67ev  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(439)

我在 hive 里有一张table,看起来像下面的

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

我想在表中循环,比较前一个值和fruit,并基于循环创建一个新列(total)。这就是逻辑

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

新table应该是这样的

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

如何在配置单元中使用sql实现这一点?我还对查询中的结果进行了排序,以便按结果和升序值对其进行分组

pkln4tw6

pkln4tw61#

sql表表示无序集。除非列指定顺序,否则不存在“上一行”。假设您有这样一个列,那么您可以使用 lag() :

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

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

wj8zmpe1

wj8zmpe12#

除了前面的答案之外,您还可以通过如下方式写入临时表来人为创建订单:

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

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

相关问题