WITH TAB AS ( SELECT '1' AS ID, 'RUNNING' AS STATUS UNION ALL SELECT '1' , 'COMPLETED' UNION ALL SELECT '2' , 'RUNNING' UNION ALL SELECT '3' , 'RUNNING' UNION ALL SELECT '3' , 'ERROR' UNION ALL SELECT '4' , 'RUNNING' UNION ALL SELECT '4' , 'COMPLETED' ) SELECT COUNT(DISTINCT ID) FROM TAB A WHERE NOT EXISTS ( SELECT ID FROM TAB B WHERE STATUS = 'COMPLETED' AND A.ID = B.ID )
COMPLETED 가 찍힌 ID 를 제외한 데이터를 구하고, 구한 데이터 들 중에 ID의 DISTINCT 값을 COUNT 해서 구해보았습니다.
우주민님, 마농님
답변 감사합니다. 건수를 구하는것이었구요 id목록 구하는 쿼리까지 답변 주셔서 감사합니다.
답변주신 쿼리 확인해보고 문제 없는것을 확인했습니다. 감사합니다^^/
--- 테스트 데이터 --- "id" "status" 1 "running" 1 "completed" 2 "running" 3 "running" 4 "running" 4 "error" 5 "running" 5 "completed" 6 "running" 6 "error"
------------
select count(distinct id) from cnt_test_tbl a where not exists ( select id from cnt_test_tbl b where status = 'completed' and a.id = b.id )
결과 : 4건
-----------
select id from cnt_test_tbl group by id having count(case status when 'completed' then 1 end) = 0
결과 :
"id"
2
3
4
6