SQL查询实现:判断下一行是否有相同ID并标注Yes/No
SQL实现同ID下一行存在性标注方案
适用支持窗口函数的主流数据库(MySQL8.0+、PostgreSQL、SQL Server、Oracle)
LEAD窗口函数可以直接取排序后的下一行值,是性能最优的实现方案,你需要先替换SQL中的表名、排序字段为实际业务值:
SELECT *, CASE -- 判断同ID分组下当前行之后是否还有数据 WHEN LEAD(ID) OVER (PARTITION BY ID ORDER BY 你的排序字段) IS NOT NULL THEN 'Yes' ELSE 'No' END AS Flag FROM 你的表名;
逻辑说明
PARTITION BY ID:把所有数据按ID值分组,只判断同ID范围内的行ORDER BY 你的排序字段:你需要自己指定用于确定行前后顺序的字段,比如自增主键、创建时间等,“下一行”的定义完全依赖这个排序规则LEAD(ID):取当前行在分组排序后的下一行的ID值,分组最后一行的返回结果为NULL
兼容老版本MySQL(5.7及更低版本)
如果你的数据库不支持窗口函数,可以用关联子查询实现:
SELECT t1.*, CASE WHEN EXISTS ( SELECT 1 FROM 你的表名 t2 WHERE t2.ID = t1.ID AND t2.你的排序字段 > t1.你的排序字段 ) THEN 'Yes' ELSE 'No' END AS Flag FROM 你的表名 t1;
注意事项
- 必须指定明确的排序规则,否则“下一行”的定义不唯一,返回结果会出现随机偏差
- 如果需求中的“下一行”是全局排序不限制同ID,删除窗口函数中的
PARTITION BY ID即可
内容的提问来源于stack exchange,提问作者ven
相关产品推荐
相关产品推荐

