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

SQL技术求助:获取表中最后录入ID及员工最后贷款信息

让我来一步步帮你解决这两个SQL问题:

1. 如何获取表中最后录入的ID?

这里分两种常见场景来处理:

  • 如果你的ID是自增主键(比如MySQL的AUTO_INCREMENT、PostgreSQL的SERIAL),最简单的方式是取ID的最大值:
    SELECT MAX(id) AS last_inserted_id FROM your_table;
    但要注意:如果表中有过删除记录的操作,最大ID对应的可能不是实际最后录入的那条(比如删了最新的一条,剩下的最大ID是更早的记录)。
  • 如果表中有录入时间字段(比如create_time),用时间排序取最新ID会更准确:
    SELECT id FROM your_table ORDER BY create_time DESC LIMIT 1;
    (不同数据库分页语法略有差异:PostgreSQL用FETCH FIRST 1 ROW ONLY,SQL Server用TOP 1)
2. 查询员工信息及最后一笔贷款记录

你当前的SQL问题在于:MAX(Loan_id)、MAX(loan_date)、MAX(loan_amount)是各自取列的最大值,这三个值可能来自不同的贷款记录,导致结果和预期不符(比如最大的Loan_id对应的金额,可能不是最新贷款的金额)。

推荐用窗口函数解决,这是处理分组取最新记录最可靠的方式:

SELECT 
    employee_id,
    employee_name,
    department_name,
    designation_name,
    PF_type,
    PF_number,
    Opening_balance,
    Loan_id,
    loan_date,
    loan_amount
FROM (
    SELECT 
        *,
        -- 按员工分组,按贷款日期+ID倒序编号,最新的记录编号为1
        ROW_NUMBER() OVER(PARTITION BY employee_id ORDER BY loan_date DESC, Loan_id DESC) AS rn
    FROM single_roww1
) t
WHERE rn = 1;

如果你的数据库不支持窗口函数(比如老版本MySQL),可以用关联子查询的方式:

SELECT 
    s.employee_id,
    s.employee_name,
    s.department_name,
    s.designation_name,
    s.PF_type,
    s.PF_number,
    s.Opening_balance,
    s.Loan_id,
    s.loan_date,
    s.loan_amount
FROM single_roww1 s
INNER JOIN (
    -- 先找到每个员工的最新贷款日期+对应最大Loan_id
    SELECT employee_id, MAX(loan_date) AS max_loan_date, MAX(Loan_id) AS max_loan_id
    FROM single_roww1
    GROUP BY employee_id
) t ON s.employee_id = t.employee_id 
    AND s.loan_date = t.max_loan_date 
    AND s.Loan_id = t.max_loan_id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:17:30