You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在分组查询中为每组获取唯一最新记录(薪资表多分组字段同日期场景)

解决按(code1,code2)分组取最新记录的问题

这个问题很典型——当分组后的记录存在相同支付日期时,单纯按paymonth排序确实没法精准拿到最后录入的那条。咱们可以用窗口函数来完美解决这个需求,具体思路和实现如下:

核心思路

要实现每个code1+code2组合只保留最新的记录,关键是给每个分组内的记录按“新旧程度”排序,然后取每个组的第一条:

  • 用PARTITION BY code1, code2把数据按目标组合分组
  • 用ORDER BY paymonth DESC让每个组内最新的日期排在前面;如果同组内有相同日期的记录,需要额外加一个能判断录入顺序的字段(比如自增主键id、录入时间create_time),按这个字段降序,确保最后录入的记录排在第一位
  • 用ROW_NUMBER()给每个组内的记录编号,编号为1的就是我们要的最新记录

具体SQL实现

假设你的表有一个自增主键id(如果没有的话,可替换为业务上能区分录入顺序的字段):

WITH ranked_salary AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY code1, code2 
            ORDER BY paymonth DESC, id DESC
        ) AS rn
    FROM salary
)
SELECT paymonth, code1, code2, payment
FROM ranked_salary
WHERE rn = 1;

结果验证

针对你提供的测试数据:

paymonthcode1code2payment
01/01/20211131000
01/01/2021111750
01/02/2021113650

这个查询会返回:

paymonthcode1code2payment
01/01/2021111750
01/02/2021113650

完全符合你的预期:(11,3)组合取了最新的2月记录,(11,1)组合只有一条记录自然被保留。

内容的提问来源于stack exchange,提问作者mlwacosmos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:07:43