这里棘手的部分是,某些记录是重复的 ID (API),并且 Lst_30 列中可能包含零或大于零。如果存在重复的 API,那么我需要在 Lst_30 上执行最大值,并在大于零时跳过记录。换句话说,我只想要 Lst_30 值不大于零的 ID。我希望我解释得对。
以下是一些示例数据,在本例中,API(17031236100000 和 17031236100000)是应返回的唯一记录:
API LST_30
17031236030000 0
17031236030000 579.727460485171
17031236070000 2027.485
17031236080000 1472.838
17031236100000 0
17031236100000 0
17031236110000 2251.653
17031236120000 282.14245094328
17031236120000 0
17031236130000 0
17031236130000 0
17031236140000 1728.11885164476
我的尝试如下:
SELECT DISTINCT TOP (100) PERCENT A.API, A.LST_30, B_1.Count
FROM dbo.InProduction AS A
INNER JOIN (SELECT COUNT(*) AS Count, LST_30d FROM dbo.InProduction AS B
WHERE (LST_30 = 0) GROUP BY LST_30) AS B_1
ON A.LST_30 = B_1.LST_30
WHERE (B_1.Count > 1) OR (B_1.Count = 1) ORDER BY A.API
最佳答案
查找具有 LST_30 = 0
的 API,然后使用 NOT EXISTS()
排除也具有 LST_30 > 1
的 API:
SELECT API, LST_30, COUNT(*)
FROM dbo.InProduction P
WHERE LST_30 = 0
AND NOT EXISTS (SELECT *
FROM dbo.InProduction P2
WHERE P.API = P2.API
AND P2.LST_30 > 0)
GROUP BY API, LST_30
假设您仍然需要 COUNT(*)
,但如果不需要,您可以删除该部分:
SELECT DISTINCT API
FROM dbo.InProduction P
WHERE LST_30 = 0
AND NOT EXISTS (SELECT *
FROM dbo.InProduction P2
WHERE P.API = P2.API
AND P2.LST_30 > 0)
关于SQL 按 ID 查找单独列中值仅为零的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914305/