Ver Mensaje Individual
  #10 (permalink)  
Antiguo 14/06/2008, 05:09
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 6 meses
Puntos: 2658
Respuesta: DESAFIO: Consulta imposible

Una nota sobre la forma determinar las tarifas vigentes, es que tal y como has planteado los datos, el almacenamiento de las diferentes tarifas tiene una falla conceptual que puede producir errores:
- Si una tarifa está vigente, por ejemplo, entre el 25/05/2007 y el 30/03/2008, la vigencia de la siguiente tarifa debería ser a partir del día inmediato posterior al último de la anterior. Por un lado, esa es la costumbre comercial: las tarifas tienen vigencia entre un día X1 y un día X1+1, sin considerar horas, por otro lado si no lo haces de ese modo, toda facturación en las fechas límites se vuelve ambigua, porque ¿a qué tarifa corresponde?
- El segundo detalle es que no puedes usar en una tabla para consultas de cálculo un valor que sea nulo. porque hace nulo cualquier cálculo. Una fecha '0000-00-00 00:00:00' simplemente no existe, y hay que considerarlo en la consulta.
Es posible que los errores de cálculo se deban a estas situaciones.
Una sugerencia que te puedo hacer es que realices las consultas en forma secuenciada, para verificar si las diferentes partes y niveles están juntando los datos que realmente esperas.
Eso es lo que hago cuando tengo consultas complejas: voy ejecutando las subconsultas como capas de una cebolla, agregandole complejidad de a una tabla por vez y de a una subconsulta por vuelta. De esa forma puedes determinar en qué punto lo que obtienes se aleja de lo que quieres.
Incluso, en ocasiones, realizar dos subconsultas con INNER JOIN unidas por otro INNER JOIN puede resultar mucho más rápida, que hacer los cuatro a la vez en una sola subconsulta.
Si no lo estás usando, bájate la GUI de MySQL (Query Browser) y pruébalo allí. Es bastante eficiente para ese nivel de desarrollo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)