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

时间:2018-07-13 07:40:56

标签: sql database sybase

我有一张表格,其中包含以下示例数据:

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

..依此类推

每个查询都以“新”状态开始,并且可以通过中间状态(“开始”,“待处理”)到达任一结束状态(“完成”,“已取消”。)

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

PS:使用Sybase数据库

3 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

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

它将返回所有状态为InquiryIdDone且仍处于中间状态的所有Cancelled

答案 1 :(得分:1)

您可以使用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')
                 );

答案 2 :(得分:0)

我将使用聚合:

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的行数。 > 0inquiryId至少有一行。 = 0inquiryId有多行。