1

对于以下查询,我将不胜感激。我有一个如下表,

识别码 | 状态 | Msg_Id | Msg_Id_type
1 | 开始 | 机管局 | 全球的
2 | 结束 | 机管局 | 全球的
3 | 程序 | 机管局 | 全球的
4 | 开始 | BB | 全球的
5 | 开始 | 抄送 | 全球的
6 | 开始 | DD | 全球的
7 | 结束 | DD | 全球的

我想要实现的是仅选择那些记录,对于给定的 MSG_ID,除了“START”之外没有任何其他状态,或者除了“START”之外没有任何其他状态的所有记录。非常感谢您的帮助。

4

3 回答 3

1

这将为您提供所有只有 START 作为其状态的 msg_id。

select msg_id
from the_table
where msg_id in (select msg_id from the_table where status = 'START')
group by msg_id
having count(distinct status) = 1
于 2012-09-18T17:53:51.383 回答
0

这个怎么样:

SELECT *
FROM my_table a
WHERE NOT EXISTS (
        SELECT 1
        FROM my_table b
        WHERE b.status <> 'START'
            AND b.msg_id = a.msg_id
    )
    AND a.status = 'START' -- < I think you can ignore this line.
于 2012-09-18T18:30:00.783 回答
0

这应该可以帮助您:

SELECT msg_id  
  FROM TABLE  
 GROUP by msg_id  
HAVING COUNT(CASE WHEN STATUS = 'START' THEN 1 ELSE NULL END) = 1  
   AND COUNT(CASE WHEN STATUS <> 'START' THEN 1 ELSE NULL END) = 0  

`

于 2012-09-18T20:36:08.120 回答