Sql Oracle 10g选择满足特定条件的记录

Sql Oracle 10g选择满足特定条件的记录,sql,oracle,select,Sql,Oracle,Select,如果您能帮我回答以下问题,我将不胜感激。。我有一张如下的桌子 我想要实现的是,只选择那些对于给定的MSG_ID没有除START之外的任何其他状态的记录,或者选择除了START之外没有任何其他状态的所有记录。非常感谢您的帮助。这将为您提供所有状态为START的msg\u ID select msg_id from the_table where msg_id in (select msg_id from the_table where status = 'START') group by msg_

如果您能帮我回答以下问题,我将不胜感激。。我有一张如下的桌子


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

这将为您提供所有状态为START的msg\u 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

这将为您提供所有仅以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
这个怎么样:

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.
这个怎么样:

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.
这将有助于您:

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  
`

这将帮助您:

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  

`

请根据您的样本数据提供所需的输出。4 |开始| BB |全局| 5 |开始| CC |全局|因为这些是除开始之外没有任何其他状态的唯一记录。谢谢。请根据您的样本数据提供所需的输出。4 |开始| BB |全局| 5 |开始| CC |全局|因为这些是除开始之外没有任何其他状态的唯一记录。谢谢。嗨,马,我刚刚运行了上面的查询,但没有得到任何结果。我道歉。是数据问题导致查询不返回任何结果。它起作用了。谢谢大家的回复。嗨,马,我刚刚运行了上面的查询,但没有得到任何结果。我道歉。是数据问题导致查询不返回任何结果。它起作用了。谢谢大家的回复。。