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

如何筛选user_id与raisedtime重复且duration更大的数据行

筛选同user_id和raisedtime组内duration最大的行

你的需求是保留每个user_id+raisedtime分组中duration最大的所有行(包括分组内多个行duration相同且均为最大值的情况)。你当前的SQL仅能得到分组后的最大duration值,无法获取对应的cleartime等完整行数据,以下是两种可行的解决方案:

方案1:通过JOIN关联聚合结果

先分组计算每个user_id+raisedtime组合的最大duration,再将原表与该聚合结果关联,筛选出符合条件的完整行:

SELECT a.*
FROM alarms a
INNER JOIN (
    SELECT user_id, raisedtime, MAX(duration) AS max_duration
    FROM alarms
    GROUP BY user_id, raisedtime
) m 
ON a.user_id = m.user_id 
AND a.raisedtime = m.raisedtime 
AND a.duration = m.max_duration;

方案2:使用窗口函数(推荐)

利用窗口函数RANK()对每个分组内的行按duration降序排名,然后筛选排名为1的行(所有最大值行都会被保留):

SELECT user_id, raisedtime, cleartime, duration
FROM (
    SELECT *,
           RANK() OVER (PARTITION BY user_id, raisedtime ORDER BY duration DESC) AS rnk
    FROM alarms
) ranked_data
WHERE rnk = 1;

针对你的示例数据,两种方案都会返回以下结果:

user_idraisedtimecleartimeduration
3_dsr2022-07-222022-07-2422
1_DSR2022-07-242022-07-2621
1_DSR2022-07-242022-07-2621

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:48:28