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

如何用MySQL查询最新状态为Positive的组织成员记录

筛选最新状态为Positive的活跃成员

咱们先明确核心需求:要从成员状态记录表中,找出每个成员的最新状态记录,再从中筛选出状态为Positive的活跃成员。下面我会给出几种适配不同数据库的实现方案,你可以根据自己的实际情况选择:

方法一:窗口函数(推荐,适配支持窗口函数的数据库)

这是最直观高效的方式,通过窗口函数给每个成员的记录按时间排序,标记出最新的那条:

WITH ranked_status AS (
    SELECT 
        member_id,
        status,
        record_date,
        -- 按成员分组,每组内按记录时间倒序,最新记录标记为1
        ROW_NUMBER() OVER (PARTITION BY member_id ORDER BY record_date DESC) AS rn
    FROM member_status
)
-- 取每个成员的最新记录,且状态为Positive
SELECT member_id, status, record_date
FROM ranked_status
WHERE rn = 1 AND status = 'Positive';

方法二:子查询关联(兼容不支持窗口函数的老版本数据库)

如果你的数据库不支持窗口函数,可以用这种方式先锁定每个成员的最新记录时间,再匹配对应状态:

SELECT ms.member_id, ms.status, ms.record_date
FROM member_status ms
INNER JOIN (
    -- 先找出每个成员的最新记录时间
    SELECT member_id, MAX(record_date) AS latest_date
    FROM member_status
    GROUP BY member_id
) latest_ms ON ms.member_id = latest_ms.member_id 
            AND ms.record_date = latest_ms.latest_date
WHERE ms.status = 'Positive';

注意事项

  • 如果同一个成员在同一时间有多条状态记录(比如重复插入),窗口函数的ROW_NUMBER()会随机选一条;要是想保留所有同时间的最新记录,可以换成RANK()或者DENSE_RANK()
  • 确保record_date字段是准确的时间类型(比如datetime、timestamp),这样排序逻辑才不会出错
  • 如果表中有专门标记活跃状态的字段(比如is_active),记得在WHERE条件里加上对应的筛选,比如AND is_active = 1(根据你的实际字段名调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:27