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
.
davy.ai
Explicación:
Esta consulta SQL utiliza la instrucción
SELECT
para recuperar datos de la tablaemployee_organization
. La cláusulaWHERE
filtra los datos en base a las condiciones dadas, incluyendoemployee_id = 77
,organization_id = 16
y ya seaend_date IS NULL
oend_date
es el valor máximo.El operador
OR
se utiliza para recuperar el registro dondeend_date
es nulo oend_date
es igual al valor máximo deend_date
en una subconsulta. La subconsulta encuentra el máximo deend_date
para el mismoemployee_id
yorganization_id
.Esto devolverá una sola fila si existe en la tabla donde
employee_id = 77
,organization_id = 16
yend_date
es nulo o la fila con laend_date
máxima. Si no se encuentra ninguna fila coincidente, esta consulta dará como resultado una tabla vacía.