SQL需求:筛选Lst_30仅为0的API记录(含重复ID处理逻辑)
解决SQL筛选:保留所有Lst_30值均不大于0的API(ID)记录
我来帮你搞定这个SQL问题!你的需求核心是:排除那些存在任意一条Lst_30>0的重复ID,只保留所有Lst_30值都≤0的ID及其对应记录,下面分两种场景给你实现方案:
场景1:返回符合条件的完整记录
用CTE(公共表表达式)先筛选出合格的ID,再关联原表获取完整数据,写法清晰易读:
WITH qualified_apis AS ( -- 按ID分组,筛选出Lst_30最大值≤0的ID SELECT ID FROM your_table_name GROUP BY ID HAVING MAX(Lst_30) <= 0 ) -- 关联原表,取出这些合格ID的所有记录 SELECT t.* FROM your_table_name t INNER JOIN qualified_apis q ON t.ID = q.ID;
场景2:仅返回符合条件的ID
如果只需要得到合格的API(ID)列表,直接用分组+Having即可:
SELECT ID FROM your_table_name GROUP BY ID HAVING MAX(Lst_30) <= 0;
逻辑解释
GROUP BY ID:把相同API的记录聚合成一组HAVING MAX(Lst_30) <= 0:只保留组内Lst_30的最大值≤0的ID——这就确保了该ID的所有Lst_30都不会大于0(只要有一条>0,最大值就会>0,被排除)- 示例里的API 17031236100000所有Lst_30都是0,最大值为0,符合条件,会被保留;其他有Lst_30>0的重复ID都会被过滤掉。
内容的提问来源于stack exchange,提问作者DaBears
相关产品推荐
相关产品推荐

