按多列/结束列值状态获取表行



我有一个表,其中包含如下示例数据:

InquiryId   status
-------------------
inquiry1    New
inquiry1    Started
inquiry1    Done
inquiry2    New
inquiry2    Pending
inquiry3    New
inquiry3    Started
inquiry4    New
inquiry4    Cancelled

等等

每个查询都以"新"状态开始,并且可以通过中间状态("已开始"、"待定"(到达任何一个结束状态("完成"、"已取消"..(

问题是如何找到以New开头但从未达到结束状态的查询列表,即需要编写什么SQL查询才能获得未完成查询的列表。

p.S:使用Sybase数据库

您可以使用以下查询:

select distinct InquiryId
from <table_name>
where status not in('Done','Cancelled');

它将返回所有不具有DoneCancelled状态且仍处于中间状态的InquiryId

您可以使用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具有多于一行。

最新更新