postgresql与not in合并

ecfsfe2w  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(279)

我有一个实体表,每个实体可以有不同的状态。为了保持历史记录,每个状态更改都由一个新行反映。
例子:

Entity Id      Status  
123456         1    
123456         2  
789000         1

假设我想找到所有只有状态1的行(如果它们有其他状态,就不应该返回它们),我该怎么做呢?

afdcj2ne

afdcj2ne1#

此查询:

select entityid
from tablename
group by entityid
having min(status) = 1 and max(status) = 1

返回所有 entityid 是你想要的,所以你可以和接线员一起使用 IN :

select * from tablename
where entityid in (
  select entityid
  from tablename
  group by entityid
  having min(status) = 1 and max(status) = 1 
)
yfwxisqw

yfwxisqw2#

只是使用 not exists :

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.entity_id = t.entity_id and t2.status <> 1
                 );

相关问题