Access 2016中查找Result字段小于3的连续相邻记录实现咨询
这个需求完全可以实现,属于SQL领域典型的**连续序列分组(孤岛问题)**场景,以下是通用实现方案:
核心逻辑
利用窗口函数给连续满足Result < 3的记录分配相同的组标识,最终按组返回所有符合要求的记录即可,支持识别多组不重叠的连续序列,也兼容无符合条件记录的场景。
实现代码(兼容MySQL 8.0+/PostgreSQL/SQL Server等所有支持标准窗口函数的数据库)
WITH ordered_full AS ( -- 给全表按时间升序生成全局行号 SELECT *, ROW_NUMBER() OVER (ORDER BY 你的时间字段名 ASC) AS global_rn FROM 你的表名 ), qualified_rn AS ( -- 给满足Result<3的记录单独生成行号 SELECT *, ROW_NUMBER() OVER (ORDER BY 你的时间字段名 ASC) AS qualified_rn FROM ordered_full WHERE Result < 3 ), group_tagged AS ( -- 生成连续组标识:连续的记录两组行号差值固定 SELECT *, global_rn - qualified_rn AS group_id FROM qualified_rn ) -- 最终返回结果 SELECT 你的时间字段名, Result FROM group_tagged -- 【可选配置】如果要求“相邻连续”至少包含2条记录,取消下面两行注释即可 -- GROUP BY group_id -- HAVING COUNT(*) >= 2 ORDER BY 你的时间字段名 ASC;
低版本数据库适配
如果你的数据库不支持CTE和窗口函数(比如MySQL 5.x及更早版本),可以通过关联子查询的方式实现,示例如下:
SELECT t1.你的时间字段名, t1.Result FROM 你的表名 t1 WHERE t1.Result < 3 ORDER BY t1.你的时间字段名 ASC;
注:低版本方案如果需要过滤单条独立记录,需要额外增加关联判断逻辑,复杂度会高很多,优先建议升级到支持窗口函数的数据库版本。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

