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

如何在一对多关系中获取指定用户的最新单条合同记录?

获取指定用户各自的最新合同查询方案

你原来的查询用LIMIT 1只会返回整个筛选结果里的第一条记录,而不是每个用户的最新合同。以下两种常用方案可以解决这个问题:

方法一:使用窗口函数(推荐,适用于支持窗口函数的数据库:MySQL 8+、PostgreSQL、SQL Server等)

利用ROW_NUMBER()窗口函数按用户分组,每组内按合同签署日期倒序排序,取每组的第一条记录:

SELECT *
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY userid ORDER BY signingdate DESC) AS row_num
    FROM contract
    WHERE userid IN (123, 143, 153, 163)
) AS ranked_contracts
WHERE row_num = 1;
  • 逻辑说明:PARTITION BY userid将数据按用户分组,ORDER BY signingdate DESC让每组内最新的合同排在最前面,ROW_NUMBER()给每组的记录编号,最后筛选出编号为1的记录就是每个用户的最新合同。

方法二:使用关联子查询(兼容老版本数据库,如MySQL 5.x)

先找到每个指定用户的最新合同签署日期,再关联原表获取对应合同的完整信息:

SELECT c.*
FROM contract c
INNER JOIN (
    SELECT userid, MAX(signingdate) AS latest_sign_date
    FROM contract
    WHERE userid IN (123, 143, 153, 163)
    GROUP BY userid
) AS latest_dates ON c.userid = latest_dates.userid AND c.signingdate = latest_dates.latest_sign_date;
  • 逻辑说明:子查询先按用户分组,拿到每个用户的最大签署日期,再通过用户ID和日期关联原表,得到每个用户对应最新日期的合同。如果同一个用户在同一天有多份合同,这个方法会返回所有当天的合同;如果只需要其中一条,可以结合LIMIT或者其他条件进一步筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:15:57