Finalmente, encontré la consulta que devuelve los resultados correctos.
Me percaté de una condición que no había contemplado: cuando la entrada fue en el mes en curso, hay que verificar si ahora (el momento del calculo) es mayor o menor al mes solicitado.
De todas maneras, debo hacer mas pruebas para verificar al 100% la consulta.
Gracias Libras y Mortiprogramador.
Esta es la consulta, y la tabla, la misma.
Código MySQL:
Ver originalset @iniciomes
= '2018-02-01 00:00:00'; set @finmes
= '2018-02-28 23:59:59'; set @cero
= '0000-00-00 00:00:00';
precio_hora 'Precio/Hora'
# entrada en el mes en curso
when ((entrada
>= @iniciomes
) and (entrada
<= @finmes
)) # salida en el mes en curso
when ((salida
!= @cero
) and (salida
>= @iniciomes
) and (salida
<= @finmes
)) # salida en el siguiente mes
when ((salida
!= @cero
) and (salida
> @finmes
)) # sin salir, en el siguiente mes
#sin salir, todavia en el mes
# entrada en el mes anterior
when (entrada
< @iniciomes
) # salida en el mes en curso
when ((salida
!= @cero
) and (salida
>= @iniciomes
) and (salida
<= @finmes
)) # sin salir
when ((entrada
>= @iniciomes
) and (entrada
<= @finmes
)) when ((salida
!= @cero
) and (salida
>= @iniciomes
) and (salida
<= @finmes
)) then (entrada
>= @iniciomes
) and (entrada
<= @finmes
) and (salida
!= @cero
) and (salida
>= @iniciomes
) and (salida
<= @finmes
)
when ((salida
!= @cero
) and (salida
> @finmes
)) then (entrada
>= @iniciomes
) and (entrada
<= @finmes
) and (salida
= (select salida
from personal_asistencia
where entrada
>= @iniciomes
and entrada
<= @finmes
and salida
> @finmes
limit 1))
then (entrada
>= @iniciomes
) and (entrada
<= @finmes
) and (salida
= @cero
)
then (entrada
>= @iniciomes
) and (entrada
<= @finmes
) and (salida
= @cero
)
when (entrada
< @iniciomes
) when ((salida
!= @cero
) and (salida
>= @iniciomes
) and (salida
<= @finmes
)) then (entrada
< @iniciomes
) and (salida
!= @cero
) and (salida
>= @iniciomes
) and (salida
<= @finmes
)
then (entrada
< @iniciomes
) and (salida
= @cero
)
INNER JOIN personal_precio_hora
ON personal.id
= personal_precio_hora.id_personal