如何检测Journey表中连续行的MilestoneID是否重复
检测Journey表中连续重复的MilestoneID
你的现有SQL仅统计了每个ID下各MilestoneID的出现总次数,无法区分重复是否来自连续行,会误判非连续的重复场景。
解决方案1:找出所有存在连续重复的ID和MilestoneID
使用窗口函数LAG获取同一提案(ID)的上一行MilestoneID,对比当前行与上一行是否相同:
SELECT DISTINCT ID, MilestoneID FROM ( SELECT ID, MilestoneID, -- 替换[排序字段]为实际的流转顺序字段(如创建时间、自增序列等) LAG(MilestoneID) OVER (PARTITION BY ID ORDER BY [排序字段]) AS PrevMilestoneID FROM Journey ) t WHERE MilestoneID = PrevMilestoneID
解决方案2:直接判断是否存在连续重复
如果只需确认是否有连续重复的情况,可使用EXISTS简化查询:
SELECT CASE WHEN EXISTS ( SELECT 1 FROM ( SELECT ID, MilestoneID, LAG(MilestoneID) OVER (PARTITION BY ID ORDER BY [排序字段]) AS PrevMilestoneID FROM Journey ) t WHERE MilestoneID = PrevMilestoneID ) THEN '存在连续重复的MilestoneID' ELSE '无连续重复的MilestoneID' END AS Result
关键说明
- 必须指定
ORDER BY的排序字段:SQL表的行顺序不固定,需通过流转时间、自增ID等字段明确提案的流转顺序,否则无法准确判断“连续”。 PARTITION BY ID确保仅在同一提案的范围内对比前后行的MilestoneID。
内容的提问来源于stack exchange,提问作者R_Avery_17
相关产品推荐
相关产品推荐

