如何获取产品修改日期后的当前产品分组
获取产品最新修改日期对应的当前分组方案
针对你要获取产品修改日期后的当前产品分组的需求,之前用string aggregation加逐产品替换的方式行不通,核心原因是没先筛选出每个产品的最新分组记录,直接聚合会把历史数据混进去。给你两个实用的SQL方案:
方案1:获取每个产品的当前分组
如果需要单独查看每个产品对应的最新分组,用窗口函数筛选最新记录即可:
WITH latest_product_records AS ( SELECT product_id, group_name, modify_date, -- 按产品分区,修改日期倒序排序,最新记录标记为1 ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY modify_date DESC) AS row_rank FROM 你的产品表名 ) SELECT product_id, group_name, modify_date FROM latest_product_records WHERE row_rank = 1;
方案2:按当前分组聚合产品列表
如果要把同一当前分组下的产品汇总起来,在方案1的基础上再做聚合:
WITH latest_product_records AS ( SELECT product_id, group_name, ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY modify_date DESC) AS row_rank FROM 你的产品表名 ) SELECT group_name, STRING_AGG(product_id, ', ') AS 产品列表 -- 可根据需求调整分隔符 FROM latest_product_records WHERE row_rank = 1 GROUP BY group_name;
关键说明
窗口函数ROW_NUMBER()会给每个产品的所有记录按修改日期从新到旧排号,取排号为1的就是该产品的最新分组记录,之后再做聚合就不会有历史数据干扰,比直接替换文本的逻辑更准确。
内容的提问来源于stack exchange,提问作者cadisafa
相关产品推荐
相关产品推荐

