GBase 8a数据库窗口函数实现分组取记录详解

📅 2026/7/23 12:22:34 👁️ 阅读次数 📝 编程学习
GBase 8a数据库窗口函数实现分组取记录详解

ROW_NUMBER() 是南大通用GBase 8a数据库(gbase database)支持的窗口函数之一,为结果集的每一行分配一个连续唯一序号。配合 PARTITION BY 分组和子查询过滤,可以轻松实现"取每个分组中最新/最大的一条记录"——这在传统写法中需要复杂的自连接才能实现。

使用示例

-- 场景:查询每个用户最近一次登录的记录

-- 准备数据CREATE TABLE user_login (user_id INT,login_time DATETIME,ip_addr VARCHAR(50));

-- 核心写法:用 ROW_NUMBER() 按用户分组、按时间倒序编号SELECT user_id, login_time, ip_addrFROM (SELECT user_id,login_time,ip_addr,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_time DESC) AS rnFROM user_login) tWHERE rn = 1;

三种排名函数对比

注意:窗口函数不能直接放在 WHERE 子句中,必须先在子查询中计算,外层再过滤。返回搜狐,查看更多