SQL 按 ID 查找单独列中值仅为零的记录

标签 sql sql-server

这里棘手的部分是,某些记录是重复的 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/

相关文章:

.net - 与 SQL DB 的同步框架 : Getting Started

mysql - SQL - AS - 表不存在 - 1146

mysql - 查询 "on"子句不限制加入?

SQL先排序,然后在over子句中分区

SQL 服务器 2000 : generating and incrementing data from column conditionally without using CURSOR

sql-server - SQL Server Modulo 函数似乎返回超出预期范围的值

sql-server - sql查询中的截断和删除命令有什么区别

mysql 查询未返回预期值

mysql - SQL 数据库 : Display available seats for each screening

mysql - 如何在 mysql 中正确定义 [float] 数据类型