FIRST_VALUE, 返回序列中第一个值

LAST_VALUE,用于返回序列中最后一个值。

last_value返回异常

hive on spark 中可能存在 oracle相同的问题 order by 时 取的值为当前行之前的最后一个值。

解决方案

使用first_value 逆序排列取值

参数:

LAST_VALUE ( [scalar_expression )
OVER ( [ partition_by_clause ] order_by_clause rows_range_clause )
在使用时发现取的值不是分组中最后一个的值,因为默认是取到分组(可选)第一项到当前行的。

如果Order的值变化了,基本上也就是当前行的值了,如果没有变化就取相同Order系列中的最后一项。

如果要取整个组的最后一项可以增加RANGE参数来限定范围:

SELECT LAST_VALUE(ID) OVER (PARTITION BY G ORDER BY seq RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM t
上面的代码就可以取到当前分组中的最后一项。