1

次のクエリで助けていただければ幸いです。以下の表があります。

UID | ステータス | メッセージ ID | Msg_Id_type
1 | スタート | AA | グローバル
2 | 終了 | AA | グローバル
3 | プロセス | AA | グローバル
4 | スタート | BB | グローバル
5 | スタート | CC | CC | グローバル
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 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 に答える
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 に答える