如何筛选拥有ope 132但无ope 131的车辆操作记录?
解决方案:找出存在132操作但无131操作的车辆
针对你的需求,这里提供几种高效的SQL查询方法,帮你精准筛选出符合条件的车辆:
方法1:GROUP BY + 聚合条件筛选
通过按车辆ID分组,结合聚合函数判断该车辆是否包含目标操作:
SELECT idp FROM your_table_name GROUP BY idp HAVING SUM(CASE WHEN ope = 132 THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN ope = 131 THEN 1 ELSE 0 END) = 0;
SUM(CASE WHEN ope = 132 THEN 1 ELSE 0 END) > 0:确保该车辆存在132操作SUM(CASE WHEN ope = 131 THEN 1 ELSE 0 END) = 0:确保该车辆不存在131操作
方法2:NOT EXISTS 子查询
直接筛选有132操作的车辆,同时排除存在131操作的车辆:
SELECT DISTINCT idp FROM your_table_name t1 WHERE ope = 132 AND NOT EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.idp = t1.idp AND t2.ope = 131 );
NOT EXISTS子查询会检查同ID车辆是否有131操作,若有则排除该车辆DISTINCT用于去重,避免同一车辆因多条132操作被重复返回
方法3:LEFT JOIN 筛选NULL
通过左连接关联有131操作的记录,筛选未关联上的车辆(即无131操作):
SELECT DISTINCT t1.idp FROM your_table_name t1 LEFT JOIN your_table_name t2 ON t1.idp = t2.idp AND t2.ope = 131 WHERE t1.ope = 132 AND t2.idp IS NULL;
- 左连接后,
t2.idp IS NULL表示该车辆没有对应的131操作记录 DISTINCT确保每个车辆ID只返回一次
内容的提问来源于stack exchange,提问作者Nexen
相关产品推荐
相关产品推荐

