Todo esto se puede resumir en el siguiente modelo de datos:
La idea es hacer un select para obtener por cada arriendo que persona lo arrendo, la fecha de inicio del arriendo, la fecha de termino del arriendo, el precio por hora, la cantidad de horas que hay entre el inicio del arriendo y la de fin y finalmente, el total a pagar.
El problema es que es necesario calcular la cantidad de horas que hay entre las fechas de inicio y termino para poder calcular el precio final que tendra el arriendo.
Para esto, se puede utilizar las funciones TIMEDIFF y EXTRACT incluidas en mysql.
Con la funcion TIMEDIFF se obtiene la diferencia calculada en horas entre dos fechas. Esto es bueno, pero también malo para lo que queria realizar, ya que TIMEDIFF retorna en formato de hora (ejemplo: hh:mm:ss).
Aqui es donde entra en acción la función EXTRACT. Esta función permite extraer el año, el mes, el día, la hora, minutos o segundos de un valor en formato DATETIME.
Entonces, hay que extraer la parte hora de la diferencia entre la fecha de inicio y termino.
La sentencia sería la siguiente:
SELECT ae.idArriendoEspacio as 'id arriendo', p.rut as rut, p.nombre as nombre, p.apellido as apellido, e.descripcion as descripcion, ae.fecha_inicio as inicio, ae.fecha_termino as termino, e.precio_hora as precio, EXTRACT(hour from TIMEDIFF(ae.fecha_termino, ae.fecha_inicio)) as horas, EXTRACT(hour from TIMEDIFF(ae.fecha_termino, ae.fecha_inicio)) * e.precio_hora as 'monto total'
FROM ArriendosEspacio ae, personas p, espacios e
WHERE ae.idpersona = p.idpersona and ae.idespacio = e.idespacio;
Como resultado obtenemos algo asi:
Se puede observar que por cada arriendo se calcula las cantidades de horas y el monto total a pagar.
Links: