SQLite中如何筛选具有指定间隔的唯一整数?
解决方案
要筛选出符合「value唯一,且没有其他行的value和它相差小于3」的行,可以用下面的SQL实现:
实现逻辑
分两步判断:
- 先确认当前行的
value在表里只出现过一次; - 再确认没有任何其他行的
value和它的绝对值差小于3。
SQL 查询语句
假设你的表名为your_table,执行以下查询:
SELECT t.id, t.name, t.value FROM your_table t WHERE -- 确保当前value是唯一的 (SELECT COUNT(*) FROM your_table WHERE value = t.value) = 1 AND -- 确保没有其他value和当前value的差小于3 NOT EXISTS ( SELECT 1 FROM your_table o WHERE o.value != t.value AND ABS(o.value - t.value) < 3 )
对应示例验证
针对你给出的value列表:14, 15, 15, 17, 20, 23, 23, 23, 24, 29, 33, 32, 32, 33, 38, 38, 43:
20只出现1次,和它最近的17、23都差3,不满足“小于3”的条件,符合要求;29只出现1次,最近的32差3,同样符合;43只出现1次,最近的38差5,符合要求;
最终返回这三个值对应的行,和你的期望一致。
注意事项
如果你的需求里“相差在3以内”包含等于3的情况(也就是绝对值≤3),把SQL里的< 3改成<= 3就行,但这样你的示例里20会因为存在17(差3)被排除,和你给出的结果不符,所以这里按你的示例逻辑用< 3判断。
内容的提问来源于stack exchange,提问作者Jordan Kizer
相关产品推荐
相关产品推荐

