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

SQL查询:获取各INTERNSHIP ID最新Term对应的Term Description

解决方案:获取每个实习生ID的最新Term及对应描述

首先先明确你的表结构(我把你给出的代码块转换成更清晰的表格形式):

INTERNSHIP表

INTERNSHIP IDTerm
12015
12014
22016
22017

Term表

TermTerm DescriptionEnd Date
2014Summer 20148/1/2014
2014Summer 20148/1/2014
2015Fall 201512/1/2015
2017Spring 20174/1/2017
2017Spring 20176/1/2017

你的需求是找到每个ID对应的最新Term,并关联Term表拿到对应的Term Description,你之前的SQL只完成了第一步,没关联Term表,而且子查询的写法也有问题(没有按ID分组取最大Term,会拿到全局最大Term)。下面给你两种可行的解决方案:

方法1:子查询+关联表(兼容大多数数据库)

这种方法先通过子查询获取每个ID的最新Term,再回连原表和Term表拿到描述,同时处理Term表的重复行:

SELECT 
    i.`INTERNSHIP ID` AS ID,
    i.Term,
    t.`Term Description`
FROM 
    INTERNSHIP i
-- 关联子查询拿到每个ID的最新Term
JOIN (
    SELECT `INTERNSHIP ID`, MAX(Term) AS LatestTerm
    FROM INTERNSHIP
    GROUP BY `INTERNSHIP ID`
) latest 
    ON i.`INTERNSHIP ID` = latest.`INTERNSHIP ID` 
    AND i.Term = latest.LatestTerm
-- 关联去重后的Term表(因为Term表有重复的Term-描述组合)
JOIN (
    SELECT DISTINCT Term, `Term Description`
    FROM Term
) t 
    ON i.Term = t.Term;

方法2:窗口函数(适合支持窗口函数的数据库,如MySQL 8+、PostgreSQL、SQL Server等)

这种方法更简洁,用ROW_NUMBER()窗口函数给每个ID的Term按降序排名,取排名第一的就是最新的记录:

SELECT 
    ID,
    Term,
    `Term Description`
FROM (
    SELECT 
        i.`INTERNSHIP ID` AS ID,
        i.Term,
        t.`Term Description`,
        -- 按ID分组,Term降序排序,第一行就是最新Term
        ROW_NUMBER() OVER (PARTITION BY i.`INTERNSHIP ID` ORDER BY i.Term DESC) AS rn
    FROM INTERNSHIP i
    JOIN Term t ON i.Term = t.Term
) ranked
WHERE rn = 1;

为什么你的原SQL不行?

你原来的SQL中,子查询SELECT MAX(INTERNSHIP.Term)没有和外层的ID关联,会返回整个INTERNSHIP表的最大Term(也就是2017),而不是每个ID自己的最大Term。而且你没有和Term表做JOIN,自然拿不到Term Description。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:12:41