У меня есть эта база данных
+----+-------+--------+-------------+---------------------+------------+---------+
| id | jobid | status | worker | addedTime | jobType | sceneId |
+----+-------+--------+-------------+---------------------+------------+---------+
| 56 | TEST1 | 2 | na | 2020-02-07 13:19:28 | PROC_STD | 123test |
| 57 | TEST2 | 2 | na | 2020-02-07 13:19:29 | PROC_STD | 123test |
| 58 | TEST3 | -1 | na | 2020-02-08 06:45:25 | PROC_STD | 124test |
| 59 | TEST4 | -1 | na | 2020-02-08 06:45:25 | PROC_STD | 124test |
| 60 | TEST5 | 2 | na | 2020-02-08 06:55:24 | PROC_STD | 124test |
| 61 | TEST6 | 2 | na | 2020-02-08 06:55:25 | PROC_STD | 124test |
+----+-------+--------+-------------+---------------------+------------+---------+
Использование
SELECT sceneId, COUNT(*) FROM jobqueue WHERE status=2 GROUP BY sceneId, status HAVING COUNT(*) > 1;
Я могу сгруппировать sceneId, чтобы получить это
+---------+----------+
| sceneId | COUNT(*) |
+---------+----------+
| 123test | 2 |
| 124test | 2 |
+---------+----------+
Но меня интересует только sceneId 123test, поскольку все строки имеют статус 2, тогда как 124test имеет статус 2 и -1.
Изменение запроса следующим образом status! = 2 Я могу хотя бы получить sceneId. Я не хочу, чтобы
SELECT sceneId, COUNT(*) FROM jobqueue WHERE status!=2 GROUP BY sceneId, status HAVING COUNT(*) > 1;
получил это
+---------+----------+
| sceneId | COUNT(*) |
+---------+----------+
| 124test | 2 |
+---------+----------+
Может ли мой первый запрос быть отфильтрован вторым отрицательным запросом, или есть другие хитрые приемы для этого i sql?
Для ясности я хочу изменить свой запрос, чтобы получить только sceneIds (может быть больше одного, но в моем примере есть только один действительный результат, который я хочу), который имеет только статус 2, это результат, который я хочу?
+---------+----------+
| sceneId | COUNT(*) |
+---------+----------+
| 123test | 2 |
+---------+----------+
Я использую mysql Ver 14.14 Distrib 5.7.28, для Linux (x86_64) используя оболочку EditLine в Ubuntu 16.04