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

SQL查询结果与loan_repayment_schedule表数据不符,如何修正?

问题修正方案

问题核心是loan_repayment_schedule表中单个loan_id可能对应多条还款计划记录,直接关联会返回所有匹配记录,或意外取到非目标数据。仅通过匹配loan_id获取正确数据,可采用以下两种修正方式:

方式一:获取每个loan_id的最新还款记录(按更新时间排序)

如果updated_at代表记录的更新时间,且最新记录为正确数据,可通过窗口函数先筛选出每个loan_id的最新记录,再关联主查询:

SELECT 
    loan_applications.province_id AS province_id,
    loan_applications.branch AS branch,
    loans.id AS loanid,
    loans.client_id,
    loans.loan_application_id,
    loan_applications.disbursement_date AS disbdate,
    loan_applications.disbursed_amount AS disbamt,
    loans.term_period,
    loan_applications.current_loan_place AS loancycle,
    loans.last_repayment_date AS maturitydate,
    clients.dob,
    JSON_EXTRACT(loan_question_data.input_data, '$.gender') AS gender,
    JSON_EXTRACT(loan_question_data.input_data, '$.martial_status') AS martial,
    JSON_EXTRACT(loan_question_data.input_data, '$.education') AS education,
    rps.status,
    rps.remain_balance,
    rps.period,
    rps.repayment_date,
    rps.updated_at
FROM
    loans
JOIN loan_applications ON loans.loan_application_id = loan_applications.id
JOIN clients ON loans.client_id = clients.id
JOIN loan_question_data ON loan_applications.id = loan_question_data.id
JOIN (
    SELECT 
        loan_id,
        status,
        remain_balance,
        period,
        repayment_date,
        updated_at,
        ROW_NUMBER() OVER (PARTITION BY loan_id ORDER BY updated_at DESC) AS rn
    FROM loan_repayment_schedule
) AS rps ON loans.id = rps.loan_id AND rps.rn = 1
WHERE
    loans.created_at BETWEEN '2024-05-01' AND '2024-05-31';

方式二:匹配特定业务规则的还款记录

如果已知正确记录的业务标识(比如当前还款周期、特定状态),可在子查询中加入对应筛选条件:

SELECT 
    loan_applications.province_id AS province_id,
    loan_applications.branch AS branch,
    loans.id AS loanid,
    loans.client_id,
    loans.loan_application_id,
    loan_applications.disbursement_date AS disbdate,
    loan_applications.disbursed_amount AS disbamt,
    loans.term_period,
    loan_applications.current_loan_place AS loancycle,
    loans.last_repayment_date AS maturitydate,
    clients.dob,
    JSON_EXTRACT(loan_question_data.input_data, '$.gender') AS gender,
    JSON_EXTRACT(loan_question_data.input_data, '$.martial_status') AS martial,
    JSON_EXTRACT(loan_question_data.input_data, '$.education') AS education,
    rps.status,
    rps.remain_balance,
    rps.period,
    rps.repayment_date,
    rps.updated_at
FROM
    loans
JOIN loan_applications ON loans.loan_application_id = loan_applications.id
JOIN clients ON loans.client_id = clients.id
JOIN loan_question_data ON loan_applications.id = loan_question_data.id
JOIN (
    SELECT * 
    FROM loan_repayment_schedule
    -- 替换为实际业务的筛选条件,比如取最大周期数的记录
    WHERE period = (SELECT MAX(period) FROM loan_repayment_schedule WHERE loan_id = loan_repayment_schedule.loan_id)
) AS rps ON loans.id = rps.loan_id
WHERE
    loans.created_at BETWEEN '2024-05-01' AND '2024-05-31';

补充说明

  • 方式一通过ROW_NUMBER()窗口函数按loan_id分组,倒序排序后只保留每组第一条,确保拿到最新更新的记录。
  • 方式二适用于明确业务规则的场景,直接筛选符合规则的目标记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:33:14