BigQuery技术问题:如何提取每个产品组的最后一条记录
提取每组最后一条记录的SQL方案
方法1:使用窗口函数(推荐,适用于MySQL 8+、PostgreSQL、SQL Server等支持窗口函数的数据库)
假设你的表名为products,产品组字段是product_group,用自增主键id判断插入顺序(如果是用创建时间,替换成create_time即可):
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY product_group ORDER BY id DESC) AS rn FROM products ) t WHERE rn = 1;
PARTITION BY product_group按产品组分组,ORDER BY id DESC让每组内最新的记录排在首位,筛选rn=1就能拿到每组最后一条。
方法2:关联子查询(兼容旧版本数据库)
如果数据库不支持窗口函数,可以先通过子查询找到每组的最大id(或最新时间),再关联原表获取完整记录:
SELECT p.* FROM products p INNER JOIN ( SELECT product_group, MAX(id) AS max_id FROM products GROUP BY product_group ) pg ON p.product_group = pg.product_group AND p.id = pg.max_id;
关键说明
核心是确定每组内判断“最后一条”的依据(比如自增ID、创建时间),只要替换上述代码里的排序字段,就能适配你的实际表结构。
内容的提问来源于stack exchange,提问作者James Bond
相关产品推荐
相关产品推荐

