如何编写查询语句获取表中首个出现次数不为两次的活跃game_id
获取首个出现次数不为两次的活跃game_id的SQL查询方案
假设我们有一张记录游戏活跃数据的表(比如命名为game_activity),包含game_id(目标游戏ID)和用于确定记录顺序的字段(比如activity_time活跃时间或自增id)。以下是实现需求的具体SQL方案:
核心思路
- 统计每个
game_id的总出现次数 - 筛选出出现次数不等于2的
game_id - 按照
game_id首次出现的顺序排序,取第一个结果
具体SQL示例
场景1:用时间字段确定首次出现顺序
适用于表中有activity_time这类记录活跃时间的字段:
SELECT game_id FROM ( SELECT game_id, COUNT(*) AS occurrence_count, MIN(activity_time) AS first_active_time FROM game_activity GROUP BY game_id HAVING occurrence_count != 2 ) AS filtered_games ORDER BY first_active_time ASC LIMIT 1;
场景2:用自增ID确定首次出现顺序
如果表中没有时间字段,只有自增主键id,可以用主键的最小值来判断首次出现顺序:
SELECT game_id FROM ( SELECT game_id, COUNT(*) AS occurrence_count, MIN(id) AS first_record_id FROM game_activity GROUP BY game_id HAVING occurrence_count != 2 ) AS filtered_games ORDER BY first_record_id ASC LIMIT 1;
补充说明
- 子查询先完成分组统计和筛选,外层查询按首次出现顺序排序后取第一条结果
- 不同数据库的"取第一条"语法略有差异:SQL Server用
TOP 1,Oracle用FETCH FIRST 1 ROW ONLY,上述示例以MySQL/PostgreSQL通用写法为主
内容的提问来源于stack exchange,提问作者Abhay
相关产品推荐
相关产品推荐

