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

如何按用户筛选特定事件?锁定停留在Event 3的数据库用户

筛选最大事件为Event 3的用户实现方案

以下是几种高效的SQL实现方法,根据你的表结构和需求选择合适的方式:

方法1:GROUP BY + HAVING(最简洁)

假设你的表名为user_events,包含user_id(用户ID)和event_name(事件名称)字段:

SELECT user_id
FROM user_events
GROUP BY user_id
HAVING MAX(event_name) = 'Event 3'

注意:如果事件命名的字符串排序不符合逻辑(比如存在Event 10这类会干扰字符串排序的情况),可以提取事件的数字部分进行比较:

SELECT user_id
FROM user_events
GROUP BY user_id
HAVING MAX(CAST(SUBSTRING(event_name, 7) AS INT)) = 3

方法2:NOT EXISTS(精准排除)

这种方法可以确保用户确实存在Event 3,同时从未产生Event 4:

SELECT DISTINCT ue.user_id
FROM user_events ue
WHERE ue.event_name = 'Event 3'
AND NOT EXISTS (
    SELECT 1
    FROM user_events ue2
    WHERE ue2.user_id = ue.user_id
    AND ue2.event_name = 'Event 4'
)

方法3:窗口函数(修复你之前的rank用法)

如果想用窗口函数实现,需要明确事件的排序规则,避免字符串排序的坑:

WITH user_max_event AS (
    SELECT 
        user_id,
        event_name,
        RANK() OVER (
            PARTITION BY user_id 
            ORDER BY 
                CASE event_name 
                    WHEN 'Event 1' THEN 1
                    WHEN 'Event 2' THEN 2
                    WHEN 'Event 3' THEN 3
                    WHEN 'Event 4' THEN 4
                END DESC
        ) AS event_rank
    FROM user_events
)
SELECT DISTINCT user_id
FROM user_max_event
WHERE event_rank = 1 AND event_name = 'Event 3'

这里通过CASE将事件映射为可排序的数字,确保排序逻辑正确,再取每个用户的最高排名事件,筛选出符合条件的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:35:24