SQLite查询:按规则获取目标行或全局最旧行
SQLite 查询实现需求逻辑
首先,我们可以通过CTE(公共表表达式)分步实现你的需求逻辑,具体如下:
核心逻辑拆解
- 定位第一个满足
score>600且flag=0的行(id最小的符合条件行)作为候选行 - 统计候选行之前不符合条件的行数(id小于候选行id,且不满足
score>600或flag≠0的行) - 根据统计结果返回目标行:若不符合条件行数<5,返回候选行;否则返回全局id最小的行
最终查询语句
WITH candidate AS ( SELECT * FROM test WHERE score > 600 AND flag = 0 ORDER BY id ASC LIMIT 1 ), invalid_count AS ( SELECT COUNT(*) AS cnt FROM test WHERE id < (SELECT id FROM candidate) AND (score <= 600 OR flag != 0) ) SELECT * FROM test WHERE id = CASE WHEN (SELECT cnt FROM invalid_count) < 5 THEN (SELECT id FROM candidate) ELSE (SELECT MIN(id) FROM test) END;
语句说明
candidate子查询:获取你最初想要的第一个符合条件的行invalid_count子查询:统计候选行之前所有不符合条件的记录数量- 主查询通过
CASE判断分支:如果不符合条件的行数不足5,返回候选行;否则直接返回全局id最小的行
内容的提问来源于stack exchange,提问作者sharkyenergy
相关产品推荐
相关产品推荐

