es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta de MySQL para obtener solo un registro: ya sea cuando end_date es nulo o máximo(end_date)

Tengo la siguiente tabla (employee_organization):

ID employee_id organization_id start_date end_date
1 77 16 2021-01-01 2021-06-30
2 11 23 2020-01-01 2021-05-27
3 77 16 2021-08-01 2021-08-31
4 77 16 2021-09-01 NULL

Necesito una consulta para filtrar los registros donde employee_id = 77, organization_id = 16 y end_date es null. Si no se encuentra ninguna fila coincidente, entonces debe devolver una fila con max(end_date). Por lo tanto, en la tabla de ejemplo anterior, solo se debe devolver la fila con id = 4.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai
    SELECT * FROM employee_organization 
    WHERE employee_id = 77 AND organization_id = 16 
    AND (end_date IS NULL OR end_date = (SELECT MAX(end_date) FROM employee_organization 
                                         WHERE employee_id = 77 AND organization_id = 16))
    

    Explicación:

    Esta consulta SQL utiliza la instrucción SELECT para recuperar datos de la tabla employee_organization. La cláusula WHERE filtra los datos en base a las condiciones dadas, incluyendo employee_id = 77, organization_id = 16 y ya sea end_date IS NULL o end_date es el valor máximo.

    El operador OR se utiliza para recuperar el registro donde end_date es nulo o end_date es igual al valor máximo de end_date en una subconsulta. La subconsulta encuentra el máximo de end_date para el mismo employee_id y organization_id.

    Esto devolverá una sola fila si existe en la tabla donde employee_id = 77, organization_id = 16 y end_date es nulo o la fila con la end_date máxima. Si no se encuentra ninguna fila coincidente, esta consulta dará como resultado una tabla vacía.

Comments are closed.