当前位置: 首页 > news >正文

HIVE 窗口函数处理重复数据

窗口函数row_number(),结合OVER子句中的PARTITION BYORDER 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_codeORDER BY t1.id DESC) AS rankFROM your_table t1
) subquery
WHERE rank = 1; -- 获取每个分组内最新的一条记录(id最大)

注意事项:

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

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

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

http://www.dtcms.com/a/317365.html

相关文章:

  • WebStorm转VSCode:高效迁移指南
  • 用NAS如何远程访问:详细教程与实用技巧
  • 关于C语言连续强制类型转换,有符号数据位移,以及温度传感器int16有符号数据重组处理问题
  • C++之vector类的代码及其逻辑详解 (下)
  • SELinux加固Linux安全2
  • 【数据结构初阶】--排序(四):归并排序
  • 软考软件设计师考点总结
  • [linux] Linux系统中断机制详解及用户空间中断使用方法
  • Linux部署tp5.1,nginx服务器不管访问那个方法,一直访问index/index问题解决方法
  • 阶段二:1-信息技术概述
  • helm下载tiller失败
  • 【数字图像处理系列笔记】Ch04:灰度变换与空间域图像增强(2)
  • 蚊子咬人问题何时休:深度学习引领智能灭蚊新时代
  • qt窗口--02
  • 无人设备遥控器之跳频技术篇
  • 鹧鸪云:光伏电站的“智慧中枢”,精准调控逆变器
  • 使用 Helm 在 Kubernetes 中安装 Milvus
  • 企业知识库:RAG技术实现流程总览(一)
  • 【motion】标签体系设计与检索 1:HumanML3D 和 KIT Motion-Language(KITML)
  • 河南萌新联赛2025第(四)场【补题】
  • 键帽(dp)
  • 分布式光伏气象站:安装与维护
  • 【运维进阶】DHCP服务配置和DNS域名解析
  • 最长公共子序列-动态规划
  • 如何在linux中使用Makefile构建一个C++工程?
  • 中科米堆CASAIM机加工件来料尺寸自动化三维测量方案
  • 第十八天:C++进制之间的转换
  • 机器学习算法篇(六)贝叶斯算法
  • 基于php的个人健康管理系统设计与实现/vue/php开发
  • Leetcode题解:739每日温度,用单调栈解决问题!