我有一个表格,其中包含如下示例数据:
询问1新 inquiry1开始 inquiry1完成 咨询2新 询问2待定 咨询3新 …
您可以使用以下查询:
select distinct InquiryId from <table_name> where status not in('Done','Cancelled');
它会全部归还 InquiryId 没有状态的 Done 要么 Cancelled 并且仍处于中间状态。
InquiryId
Done
Cancelled
您可以使用 not exists :
not exists
select t.* from table t where status = 'New' and not exists (select 1 from table t1 where t1.InquiryId = t.InquiryId and t1.status in ('Done', 'Cancelled') );
我会使用聚合:
select inquiryId from t group by inquiryId having sum(case when status = 'New' then 1 else 0 end) > 0 and sum(case when status in ('Done', 'Cancelled') then 1 else 0 end) = 0;
条件在 having 子句计算每个的行数 inquiryId 符合给定条件。该 > 0 说的 inquiryId 至少有一排。该 = 0 说的 inquiryId 有一排以上。
having
inquiryId
> 0
= 0