HIVE 窗口函数处理重复数据

窗口函数row_number(),结合OVER子句中的PARTITION BY和ORDER BY,为数据分组内的每一行生成一个唯一的序号。具体分析如下:

函数作用:

  • row_number():为每个分组内的行分配一个唯一的连续序号(从1开始)。

OVER子句详解:

  1. PARTITION BY t1.org_code, t1.customer_code

    • 将数据按 org_code(机构代码)和 customer_code(客户代码) 分组。

    • 窗口计算会独立发生在每个分组内。

  2. ORDER BY t1.id DESC

    • 在每个分组内,按 id 字段降序排列 (即 id 值最大的排在最前面)。

    • 序号分配基于此排序:最大的 id 对应 rank=1,次大的 id 对应 rank=2,以此类推。

结果列名:

  • 生成的序号列名为 rank(可在后续查询中通过此名称引用)。

典型使用场景示例:

复制代码
SELECT *
FROM (
    SELECT 
        t1.*,
        ROW_NUMBER() OVER (
            PARTITION BY t1.org_code, t1.customer_code
            ORDER BY t1.id DESC
        ) AS rank
    FROM your_table t1
) subquery
WHERE rank = 1; -- 获取每个分组内最新的一条记录(id最大)

注意事项:

  • 若需要完全去重 (如多行 id 相同时只取一条),优先用 ROW_NUMBER()。

  • 若需保留相同 id 的所有记录 ,改用 RANK() 或 DENSE_RANK()。

  • 性能:在分区字段(org_code, customer_code)和排序字段(id)上建立索引可加速计算。

相关推荐
九零HTTP16 分钟前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner29 分钟前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈1 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶1 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全2 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
这个DBA有点耶2 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
jnrjian3 小时前
pg_waldump --key-file-name status 查看wal 产生的db
数据库
SelectDB技术团队3 小时前
Snowflake 的开源替代怎么选:能力对照、三条部署路径与迁移执行
大数据·数据库·云原生·开源·snowflake·apache doris
Elastic 中国社区官方博客3 小时前
告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch
大数据·数据库·mongodb·elasticsearch·搜索引擎·全文检索
京东云开发者4 小时前
当我谈数据库高可用时我谈些什么
数据库