MySQL - Sacar registro si no hay ningúno posterior

 
Vista:

Sacar registro si no hay ningúno posterior

Publicado por Hercross (26 intervenciones) el 09/01/2024 10:41:58
Hola buenos días..

Tengo una tabla que me devuelve datos tal que así:
ID | clid | estado | fecha |
-------------------------------------------------------------------------------------------
12375894 | 600000000 | CONTESTADA | 2023-12-23 10:00:00 |
12875892 | 611111111 |NO CONTESTADA | 2023-12-23 11:00:00 |
12375891 | 611111111 | CONTESTADA | 2023-12-23 11:30:00 |
12375899 | 622222222 |NO CONTESTADA | 2023-12-23 12:00:00 |
12375895 | 633333333 | CONTESTADA | 2023-12-23 12:10:00 |
12375898 | 644444444 |NO CONTESTADA | 2023-12-23 13:11:00 |
12375895 | 644444444 | CONTESTADA | 2023-12-23 13:21:00 |

Me devuelve si una llamada es contestada o no, con su fecha.

Necesito sacar los valores con estado = "NO CONTESTADA", pero que NO tenga un estado="CONTESTADA" con fecha superior, es decir, en el ejemplo debería de devolverme:

ID | clid | estado | fecha |
-------------------------------------------------------------------------------------------
12375899 | 622222222 |NO CONTESTADA | 2023-12-23 12:00:00 |

Porque aunque hay más registros con estado ="NO CONTESTADA", tengo después otro registro, con el mismo clid, con fecha superior y estado="CONTESTADA".

Habría alguna forma de poder sacar solo eso?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Sacar registro si no hay ningúno posterior

Publicado por Ivan (37 intervenciones) el 10/01/2024 13:26:11
Hola,

Sí, puedes lograr eso utilizando una consulta con una cláusula `NOT EXISTS` o `NOT IN` para filtrar las filas que cumplen con tus condiciones. Asumiendo que tu tabla se llama "llamadas" , la consulta podría verse así:

1
2
3
4
5
6
7
8
9
10
SELECT *
FROM llamadas AS l1
WHERE estado = 'NO CONTESTADA'
  AND NOT EXISTS (
    SELECT 1
    FROM llamadas AS l2
    WHERE l2.clid = l1.clid
      AND l2.estado = 'CONTESTADA'
      AND l2.fecha > l1.fecha
);

Esta consulta selecciona todas las llamadas con estado 'NO CONTESTADA' y luego verifica que no exista otra llamada con el mismo "clid" que tenga un estado 'CONTESTADA' y una fecha superior. Esto debería devolver las filas que estás buscando.

Espero que te sirva, un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sacar registro si no hay ningúno posterior

Publicado por Hercross (26 intervenciones) el 01/02/2024 10:00:40
Hola Iván, muchas gracias..

Me ha funcionado perfecto!!

Un saludo y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar