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
上面的代码就可以取到当前分组中的最后一项。