SQL按分组取每组首行并关联获取去年同期数据的实现咨询
实现方案
实现逻辑:先提取每个商户的最新基准数据,再基于基准数据的年月匹配去年同期的同商户同月份数据,最后合并两类数据即可,天然兼容无同期数据的场景。
可直接运行的SQL代码如下:
WITH dataset AS (...), -- 你的原有数据集生成逻辑保持不变 latest_data AS ( -- 提取每个business_id的最新数据作为匹配基准 SELECT * FROM dataset WHERE row_num = 1 ) -- 输出所有最新数据 SELECT * FROM latest_data UNION ALL -- 输出匹配到的去年同期数据 SELECT d.* FROM dataset d INNER JOIN latest_data l ON d.business_id = l.business_id AND d.year = l.year - 1 AND d.month = l.month -- 可选排序:保证同商户的最新数据、同期数据相邻展示 ORDER BY business_id, year DESC, month DESC
逻辑说明:
latest_dataCTE复用了你已实现的取最新数据的逻辑,作为匹配同期的基准- UNION ALL前半部分输出全量最新数据,后半部分仅输出匹配到的同期数据,没有匹配结果自动不输出,无需额外处理无同期的场景
- 如果你数据集内存在同商户同年同月多条数据的情况,可以在关联后的筛选逻辑中补充去重规则(比如仅取同期数据里的最高row_num/最低row_num),按你给出的示例数据,上述代码可直接得到你预期的结果。
内容的提问来源于stack exchange,提问作者Mankind1023
相关产品推荐
相关产品推荐

