You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive SQL实现同水果组前值填充total列的方法咨询

这个需求用Hive的窗口函数LAG()就能完美解决,刚好对应你要的“取前一行值并判断分组”的逻辑,我给你写具体的实现方案:

完整SQL语句

SELECT
    fruit,
    value,
    CASE
        WHEN prev_fruit = fruit THEN prev_value
        ELSE NULL
    END AS total
FROM (
    -- 先通过LAG函数获取前一行的fruit和value
    SELECT
        fruit,
        value,
        LAG(fruit) OVER (ORDER BY fruit, value) AS prev_fruit,
        LAG(value) OVER (ORDER BY fruit, value) AS prev_value
    FROM your_table_name -- 替换成你的表名
) t
ORDER BY fruit, value;

逻辑拆解

  1. LAG()函数的作用:这是Hive窗口函数里的核心,专门用来获取当前行的前N行数据(默认N=1,正好是我们要的“前一行”)。
  2. 窗口排序规则:OVER (ORDER BY fruit, value)确保我们先按fruit分组排序,再按value升序排列,完全匹配你要求的“已对结果排序”的前提。
  3. 判断逻辑:内层查询先把前一行的fruit和value取出来,外层用CASE WHEN做判断:如果前一行的水果和当前行相同,就把前一行的value赋值给total;如果不同(比如切换到新的水果种类),就设为NULL。

示例结果

执行后你会得到和预期一致的输出:

fruitvaluetotal
apple2NULL
apple32
apple43
plum2NULL
plum32
plum43

如果你的业务需要调整排序规则(比如按value降序),只需要修改ORDER BY里的字段顺序或排序方向就行。

内容的提问来源于stack exchange,提问作者jumpman8947

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:31:32