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

如何无需列出所有列获取每个RequestID的最大创建日期?

解决RequestID重复且获取最大创建日期记录的问题

首先明确:MAX(*)报错是因为聚合函数MAX()只能作用于单个具体列,不能直接搭配通配符*使用。不过你不需要手动列出所有列也能实现需求,以下是两种常用的解决方案:

方案一:使用窗口函数ROW_NUMBER()

这是最灵活的实现方式,无需枚举所有列,直接筛选每个RequestID对应的最新记录:

WITH RankedTickets AS (
    SELECT 
        Tick.*,
        analysis.*,
        -- 按RequestID分组,每组内按创建日期倒序排,最新记录行号为1
        ROW_NUMBER() OVER (PARTITION BY Tick.RequestID ORDER BY Tick.CreatedDate DESC) AS RowNum
        -- 若CreatedDate字段在analysis表中,替换为analysis.CreatedDate即可
    FROM [CMSystemScripts].[dbo].[CMS_CMS_and_MandR_Ticketing] Tick
    INNER JOIN [dbo].[CMS_CMS_and_MandR_Ticketing_Analysis] analysis 
        ON Tick.RequestID = analysis.RequestID
)
SELECT * 
FROM RankedTickets
WHERE RowNum = 1
ORDER BY RequestID;

方案二:子查询先获取最大创建日期,再关联筛选

先提取每个RequestID对应的最大创建日期,再通过这个结果过滤原关联表的记录:

SELECT Tick.*, analysis.*
FROM [CMSystemScripts].[dbo].[CMS_CMS_and_MandR_Ticketing] Tick
INNER JOIN [dbo].[CMS_CMS_and_MandR_Ticketing_Analysis] analysis 
    ON Tick.RequestID = analysis.RequestID
INNER JOIN (
    -- 子查询得到每个RequestID的最大创建日期
    SELECT RequestID, MAX(CreatedDate) AS MaxCreatedDate
    FROM [CMSystemScripts].[dbo].[CMS_CMS_and_MandR_Ticketing]
    GROUP BY RequestID
) MaxDates 
    ON Tick.RequestID = MaxDates.RequestID 
    AND Tick.CreatedDate = MaxDates.MaxCreatedDate
ORDER BY Tick.RequestID;

补充说明:如果同一个RequestID存在多条记录共享最大创建日期,方案一会随机保留其中一条;方案二则会返回所有这些同日期的记录。若需要处理这种场景,可以给窗口函数的排序规则添加额外唯一字段(比如ID)来确保结果稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:31:02