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

如何获取每个Debtor对应最大LetterSeq的LetterDate及Comment信息?

获取每个债务人最后一封逾期信函的完整记录

错误原因说明

之前添加LetterDate和Comment字段报错,是因为SQL分组规则限制:SELECT中的字段要么包含在GROUP BY子句中,要么被聚合函数(如MAX()、MIN())包裹。直接添加未分组且未聚合的字段时,数据库无法确定要返回该债务人哪条记录的对应值,因此抛出错误。

解决方法

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

通过窗口函数给每个债务人的记录按LetterSeq倒序排名,筛选出排名第一的记录(即最后一封):

WITH RankedLetters AS (
    SELECT 
        DebtorID,
        LetterSeq,
        LetterDate,
        Comment,
        ROW_NUMBER() OVER (PARTITION BY DebtorID ORDER BY LetterSeq DESC) AS rn
    FROM DebtorOverdueLetterHistory
)
SELECT DebtorID, LetterSeq, LetterDate, Comment
FROM RankedLetters
WHERE rn = 1;

方法二:子查询关联

先通过子查询获取每个DebtorID对应的最大LetterSeq,再关联原表匹配完整记录:

SELECT d.DebtorID, d.LetterSeq, d.LetterDate, d.Comment
FROM DebtorOverdueLetterHistory d
INNER JOIN (
    SELECT DebtorID, MAX(LetterSeq) AS MaxLetterSeq
    FROM DebtorOverdueLetterHistory
    GROUP BY DebtorID
) m ON d.DebtorID = m.DebtorID AND d.LetterSeq = m.MaxLetterSeq;

方法三:子查询匹配(适用于不支持窗口函数的旧版本数据库)

通过关联子查询直接匹配每个债务人的最大LetterSeq对应的记录:

SELECT d.DebtorID, d.LetterSeq, d.LetterDate, d.Comment
FROM DebtorOverdueLetterHistory d
WHERE d.LetterSeq = (
    SELECT MAX(LetterSeq)
    FROM DebtorOverdueLetterHistory
    WHERE DebtorID = d.DebtorID
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:46:02