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

MySQL LEFT JOIN关联查询如何仅返回每个学生的最新请假日期

解决方案

首先明确前提:默认请假表table_2包含用于关联学生的student_id字段(否则无法匹配学生对应的请假记录),可通过以下两种方案实现需求:

方案1:预聚合请假表后关联(兼容所有MySQL版本)

先对table_2按学生ID分组,计算每个学生的最晚请假日期,再将聚合后的结果和学生基础表左关联即可,每个学生只会返回一条记录:

SELECT 
    t1.student_name,
    t1.student_id,
    t1.note,
    t2.last_leave_date
FROM table_1 t1
LEFT JOIN (
    SELECT 
        student_id,
        MAX(`leave`) AS last_leave_date
    FROM table_2
    GROUP BY student_id
) t2 ON t1.student_id = t2.student_id;
  • leave是MySQL关键字,查询时需要用反引号包裹避免语法报错
  • 没有请假记录的学生last_leave_date字段会返回NULL,如果需要自定义默认值可以用IFNULL(t2.last_leave_date, '无请假记录')替换对应字段

方案2:窗口函数实现(仅支持MySQL 8.0及以上版本)

如果除了最晚请假日期还需要同时获取该条请假记录的其他字段(比如请假原因、请假天数等),可以用窗口函数实现:

SELECT 
    t1.student_name,
    t1.student_id,
    t1.note,
    t2.`leave` AS last_leave_date,
    -- 可在此处追加需要的请假表其他字段
    t2.id AS leave_record_id
FROM table_1 t1
LEFT JOIN (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY `leave` DESC) AS rn
    FROM table_2
) t2 ON t1.student_id = t2.student_id AND t2.rn = 1;
  • PARTITION BY student_id按学生分组,ORDER BY leave DESC按请假日期倒序排序,取每组的第一条rn=1就是该学生最晚的请假记录

内容的提问来源于stack exchange,提问作者Sourav R S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:06:04