Supongamos que tengo una tabla leave_management que contiene dos columnas de fechas desde y hasta con las fechas "2016-12-11" y "2016-12-18"
Ahora quiero esos resultados para la entrada dada ...
1.
Entrada: Desde: "2016-12-7" y Hasta: 2016-12-10
Salida: la diferencia de fecha es 0 (no se encontró superposición)
2.
Entrada: Desde: "2016-12-16" y Hasta: 2016-12-18
Salida: la diferencia de fecha es 2 (este rango se superpone completamente con los datos de la tabla)
3.
Entrada: Desde: "2016-12-18" y Hasta: 2016-12-20
Salida: la diferencia de fecha es 1 (este rango se superpone parcialmente con los datos de la tabla)
aquí, fórmula de diferencia de fecha de recuento = (diferencia entre fechas dadas - recuento de superposición)
Probé una consulta como esta ...
SELECT sum((DATEDIFF(from_date, to_date))
FROM `leave_management` s1
WHERE s1.from_date <='2016-12-20' AND s1.to_date >='2016-12-18'
Esto solo da una salida perfecta para las dos primeras entradas. Pero para la tercera entrada no dio la salida esperada. Por favor, ayúdame.
Si lo entiendo correctamente, desea utilizar least()
y greatest()
:
SELECT sum(DATEDIFF(greatest(from_date, '2016-12-18'), least(to_date, '2016-12-20'))
FROM `leave_management` s1
WHERE s1.from_date <='2016-12-20' AND s1.to_date >= '2016-12-18';
Una advertencia es que es posible que deba sumar / restar un día de las constantes, dependiendo de si las fechas de finalización cuentan como superposiciones.
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