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

求助:按Term分组获取对应最新UploadDate的SQL语句修正

解决按Term分组获取每组最新UploadDate的问题

你的问题根源在于子查询没有和外层的Term关联,导致它计算的是所有符合条件记录中的全局最大UploadDate,而非每个Term组内的最大值。下面提供几种可行的修正方案:

方案1:使用窗口函数(推荐,现代数据库通用)

利用ROW_NUMBER()窗口函数给每个Term组内的记录按UploadDate降序编号,取编号为1的记录就是每组的最新数据:

SELECT Inst, Term, Year, FreezeDate, UploadDate, RecordCount, ErrorCount, FileName, System
FROM (
    SELECT 
        *,
        -- 按Term分组,每组内按UploadDate倒序排,最新的记录行号为1
        ROW_NUMBER() OVER (PARTITION BY Term ORDER BY UploadDate DESC) AS row_num
    FROM table 
    WHERE System = 'a' AND Year = '2017' AND Inst = '123' AND Term IN ('1', '4')
) grouped_data
WHERE row_num = 1;

这种方法简洁直观,支持MySQL 8.0+、PostgreSQL、SQL Server等绝大多数现代数据库。

方案2:关联子查询(兼容性更好)

让子查询和外层表的Term字段关联,这样每个Term都会单独计算自己组内的最大UploadDate:

SELECT Inst, Term, Year, FreezeDate, UploadDate, RecordCount, ErrorCount, FileName, System
FROM table t_main
WHERE 
    System = 'a' AND Year = '2017' AND Inst = '123' AND Term IN ('1', '4')
    -- 子查询关联外层的Term,计算当前Term组内的最大UploadDate
    AND UploadDate = (
        SELECT MAX(UploadDate) 
        FROM table t_sub
        WHERE t_sub.Term = t_main.Term 
          AND t_sub.System = 'a' AND t_sub.Year = '2017' AND t_sub.Inst = '123'
    );

方案3:GROUP BY + JOIN

先通过GROUP BY得到每个Term的最大UploadDate,再和原表关联获取完整记录:

SELECT t_main.Inst, t_main.Term, t_main.Year, t_main.FreezeDate, t_main.UploadDate, 
       t_main.RecordCount, t_main.ErrorCount, t_main.FileName, t_main.System
FROM table t_main
JOIN (
    -- 按Term分组,得到每组的最大UploadDate
    SELECT Term, MAX(UploadDate) AS max_upload_date
    FROM table
    WHERE System = 'a' AND Year = '2017' AND Inst = '123' AND Term IN ('1', '4')
    GROUP BY Term
) t_grouped ON t_main.Term = t_grouped.Term AND t_main.UploadDate = t_grouped.max_upload_date
WHERE t_main.System = 'a' AND t_main.Year = '2017' AND t_main.Inst = '123';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:13