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

如何在SQL Hadoop/Impala中解耦max()与额外列并获取对应日期

解决Impala中获取设备最大值及对应日期的问题

给你两种适配Impala/Hadoop SQL环境的解法,都能实现「每个设备仅返回一行全表最大值及对应日期」的需求:

方法一:使用窗口函数(推荐,写法简洁)

利用ROW_NUMBER()窗口函数按设备分组,将每个设备的读数按降序排序,取排序后第一条记录就是最大值对应的行:

WITH ranked_data AS (
    SELECT 
        ID,
        value,
        date,
        -- 按设备分组,读数降序排序,每组第一条标记为1
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY value DESC) AS rn
    FROM your_table
)
SELECT 
    ID,
    value AS max_value,
    date
FROM ranked_data
WHERE rn = 1;

注意:如果同一个设备存在多个相同的最大值,ROW_NUMBER()会随机返回其中一条;若想返回所有等值的最大值记录,把ROW_NUMBER()换成RANK()即可。

方法二:子查询关联(兼容性强)

先通过子查询算出每个设备的最大值,再关联原表匹配对应的日期:

SELECT 
    t.ID,
    t.value AS max_value,
    t.date
FROM your_table t
INNER JOIN (
    -- 先获取每个设备的最大值
    SELECT ID, MAX(value) AS max_val
    FROM your_table
    GROUP BY ID
) max_vals 
ON t.ID = max_vals.ID AND t.value = max_vals.max_val;

同样,若存在多个等值最大值,该语句会返回所有对应记录;如需仅返回一条,可结合DISTINCT或窗口函数进一步处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:01:02