sql - 选择分区满足条件的行(PostgreSQL)
问题描述
我找不到具有这些特征的类似问题,如果重复,我将关闭该问题。
想象一下,我在 PostgreSQL 数据库中有下表:
| serverdate | colA | colB | colC | colD
|-------------------------------------------
0 | 2019-12-01 | a | OK | 10 | string1
1 | 2019-12-02 | a | OK | 10 | string2
2 | 2019-12-02 | a | NOK | 100 | string3
3 | 2019-12-01 | b | OK | 0 | string1
4 | 2019-12-03 | b | OK | 1 | string1
5 | 2019-12-05 | c | NOK | 0 | string2
5 | 2019-12-07 | d | OK | 10 | string3
5 | 2019-12-08 | d | EX | 1000 | string4
5 | 2019-12-12 | e | OK | 1 | string5
我想选择适用以下条件的所有行(我不知道如何准确地表达这个条件,一个例子更清楚):
对于 colA 中的所有组,检查 colB 中是否存在 NOK。如果分组中有任何 NOK,则不要选择该组的任何行
例如,对于提到的表,结果将是:
| serverdate | colA | colB | colC | colD
|-------------------------------------------
3 | 2019-12-01 | b | OK | 0 | string1
4 | 2019-12-03 | b | OK | 1 | string1
5 | 2019-12-07 | d | OK | 10 | string3
5 | 2019-12-08 | d | EX | 1000 | string4
5 | 2019-12-12 | e | OK | 1 | string5
关于如何进行此查询的任何想法?建议简单。
提前致谢!
解决方案
NOT EXISTS
是一个规范的解决方案:
select t.*
from t
where not exists (select 1
from t t2
where t2.cola = t.cola and t2.colb = 'NOK'
);
推荐阅读
- javascript - 匹配字符串,除非以字符开头和结尾
- javascript - 如何使用 puppeteer 自动化 Amazon Connect CCP 登录?
- angular - 如何调用多个 URL 并只处理使用 RxJS 返回的第一个值?
- hadoop - 如何在 Hue Cloudera 上的 Hive 中获取下 n 行
- powershell - 如何在数组上使用带有 IF -contains 的通配符?
- java - 将 Docker 用于 Spring Boot REST 应用程序
- javascript - 为什么我会收到 Invariant Violation: Invariant Violation: Maximum update depth exceeded。在 setState 上?
- arduino - Wemos D1 ESP8266、ioBroker (Raspberry Pi 3 Model B) MQTT 连接失败
- python - cupy.cuda.cublas.CUBLASError: CUBLAS_STATUS_NOT_INITIALIZED 做cupy矩阵乘法时
- docker - 使用 docker-compose 从卷中挂载单个文件