如何用SQL筛选已永久退出群组的号码?
筛选永久退出群组的号码SQL实现
要筛选出最后一次操作是退出群组(无后续加入记录)的号码,可以通过以下两种常见SQL写法实现:
方法一:使用窗口函数(逻辑清晰,推荐)
通过窗口函数为每个号码的记录按时间倒序排序,标记出最新的一条记录,再筛选状态符合要求的号码:
WITH latest_status AS ( SELECT Number, Status, -- 按号码分组,时间倒序排序,最新记录标记为1 ROW_NUMBER() OVER (PARTITION BY Number ORDER BY Time DESC) AS row_rank FROM your_table_name ) SELECT Number FROM latest_status WHERE row_rank = 1 AND Status = 'Group Left';
方法二:使用分组子查询关联
先获取每个号码的最新操作时间,再关联原表找到对应时间的记录,最后筛选状态:
SELECT t.Number FROM your_table_name t INNER JOIN ( -- 找出每个号码的最新操作时间 SELECT Number, MAX(Time) AS latest_operation_time FROM your_table_name GROUP BY Number ) latest_times ON t.Number = latest_times.Number AND t.Time = latest_times.latest_operation_time WHERE t.Status = 'Group Left';
注意事项
- 将代码中的
your_table_name替换为你实际使用的表名 - 两种方法都会返回符合要求的号码:3299会被筛选出来,2132因最新操作是再次加入群组,不会被选中
内容的提问来源于stack exchange,提问作者pebkac
相关产品推荐
相关产品推荐

