[英]Select rows where partition meets condition (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'
);
也許窗口函數可以提供幫助:
SELECT cola, colb, ...
FROM (SELECT cola, colb, ...,
bool_or(colb = 'NOK')
OVER (PARTITION BY cola) AS hasnok
FROM tab) AS q
WHERE NOT hasnok;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.