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

如何基于SourceID优先级为每个EventID获取对应CommencingTime

按Source优先级获取每个EventID对应时间的解决方案

错误原因说明

你之前使用MIN OVER PARTITION BY ORDER BY SourceID DESC得到错误结果,是因为该语句的逻辑是按SourceID降序排序后取分组内最小的CommencingTime,你的数据中SourceID=2对应的时间是更早的2021-10-24 10:58:00,自然会被MIN函数选中,和「优先取最高SourceID对应时间」的需求逻辑完全不匹配。

实现方案

方案1:窗口函数ROW_NUMBER实现(兼容性最好,推荐)

核心逻辑:按EventID分组,每组内按SourceID降序排序,取每组排序第一的记录即可。

SELECT EventID, CommencingTime, SourceID
FROM (
    SELECT 
        EventID,
        CommencingTime,
        SourceID,
        -- 同EventID下SourceID越大优先级越高,排越靠前
        ROW_NUMBER() OVER (PARTITION BY EventID ORDER BY SourceID DESC) AS rn
    FROM 数据表名
) temp
WHERE rn = 1;

如果存在同一个EventID下有多个相同最高优先级SourceID的记录,需要全部返回的话,把ROW_NUMBER()替换为RANK()即可。

方案2:关联子查询实现

核心逻辑:先查询每个EventID对应的最高优先级SourceID,再关联回原表取对应时间。

SELECT t1.EventID, t1.CommencingTime, t1.SourceID
FROM 数据表名 t1
INNER JOIN (
    -- 先取每个EventID的最大SourceID
    SELECT EventID, MAX(SourceID) AS max_source_id
    FROM 数据表名
    GROUP BY EventID
) t2 ON t1.EventID = t2.EventID AND t1.SourceID = t2.max_source_id;

验证结果

以上两种方案运行后,得到的结果和你给出的示例正确结果完全一致:

EventIDCommencingTimeSourceID
123452021-10-24 12:58:553
123462021-10-24 12:58:553
123472021-10-24 12:58:553

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:36:03