Tengo esta base de datos
+----+-------+--------+-------------+---------------------+------------+---------+
| 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 |
+----+-------+--------+-------------+---------------------+------------+---------+
Utilizando
SELECT sceneId, COUNT(*) FROM jobqueue WHERE status=2 GROUP BY sceneId, status HAVING COUNT(*) > 1;
Puedo agrupar la ID de la escena para obtener esto
+---------+----------+
| sceneId | COUNT(*) |
+---------+----------+
| 123test | 2 |
| 124test | 2 |
+---------+----------+
Pero solo estoy interesado en sceneId 123test ya que todas las filas tienen el estado 2, mientras que 124test tiene tanto el estado 2 como el -1.
¡Cambiando la consulta como este estado! = 2 Al menos puedo obtener el ID de escena que no quiero
SELECT sceneId, COUNT(*) FROM jobqueue WHERE status!=2 GROUP BY sceneId, status HAVING COUNT(*) > 1;
para conseguir esto
+---------+----------+
| sceneId | COUNT(*) |
+---------+----------+
| 124test | 2 |
+---------+----------+
¿Se puede filtrar mi primera consulta por la segunda consulta de negación o hay otros trucos inteligentes para hacer esto i sql?
Para mayor claridad, quiero cambiar mi consulta para obtener solo sceneIds (podría ser más de uno, pero en mi ejemplo solo hay un resultado válido que quiero) que solo tenga el estado 2, ¿este es el resultado que quiero?
+---------+----------+
| sceneId | COUNT(*) |
+---------+----------+
| 123test | 2 |
+---------+----------+
Estoy usando mysql Ver 14.14 Distrib 5.7.28, para Linux (x86_64) usando el contenedor EditLine en Ubuntu 16.04
El problema es que, al poner una condición status
en la where
cláusula, eliminas filas antes de tener la oportunidad de comprobar su contenido. En su lugar, puede filtrar con otra having
condición que realice agregación condicional:
select sceneid, count(*)
from jobqueue
group by sceneid
having count(*) > 1 and min(status = 2) = 1
Esto le da la lista de sceneid
correos electrónicos que ocurren más de una vez y cuyas filas tienen status = 2
.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras