Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta recursiva

Estas en el tema de Consulta recursiva en el foro de Mysql en Foros del Web. Hola a todos tengo que armar un reporte con los dias de vacaciones que los empleados han tomado desde que comenzaron a trabajar en la ...
  #1 (permalink)  
Antiguo 01/12/2010, 11:59
 
Fecha de Ingreso: noviembre-2004
Ubicación: Montréal - Santa Fe
Mensajes: 140
Antigüedad: 19 años, 4 meses
Puntos: 2
Consulta recursiva

Hola a todos

tengo que armar un reporte con los dias de vacaciones que los empleados han tomado desde que comenzaron a trabajar en la empresa en intervalos de fecha aniversario y no por ano calendario

por ejemplo:

empleado1 comenzo a trabajar: 12-5-2008
entonces... los intervalos a mostrar son

12-5-2008 --> 11-5-2009
12-5-2009 --> 11-5-2010
12-5-2010 --> 11-5-2011

etc etc etc

Todo esto de forma automatica y dinamica

Bueno... llegue a obtener la query para un intervalo .. en este caso hize la Query para el ano en curso.. pero quisiera saber si es posible hacerlo dinamicamente para todos los demas intervalos sin usar PHP u otro lenguaje...solamente en MyQL

Código:
SELECT  
   vacation.vac_id,
  vacation.vac_type_day,
  vacation.user_pk_id,  
  vacation.vac_startDate,
  vacation.vac_endDate,
  vacation.vac_totalVac,
  vacation.vac_status,
  vacation.vac_submit_date,
  vacation.vac_comment,
  user.firstName,
  user.lastName          
FROM vacation, user 
WHERE (vacation.vac_type_day = 'Vacation') AND
      (user.pk_id = vacation.user_pk_id) AND
      (user.pk_id = 34) AND    
       vacation.vac_startDate BETWEEN 
       
       CAST((IF(TO_DAYS((DATE_FORMAT(user.startDate,'%Y-%m-%d') + INTERVAL (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(user.startDate,'%Y')) YEAR))-TO_DAYS(CURDATE())>0
         ,ADDDATE(DATE_FORMAT(user.startDate,'%Y-%m-%d') + INTERVAL (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(user.startDate,'%Y')) YEAR, -365) 
         ,DATE_FORMAT(user.startDate,'%Y-%m-%d') + INTERVAL (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(user.startDate,'%Y')) YEAR)
       ) AS DATE)
       AND
       
  
       CAST((IF(TO_DAYS((DATE_FORMAT(user.startDate,'%Y-%m-%d') + INTERVAL (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(user.startDate,'%Y')) YEAR))-TO_DAYS(CURDATE())>0
         ,DATE_FORMAT(user.startDate,'%Y-%m-%d') + INTERVAL (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(user.startDate,'%Y')) YEAR
         ,DATE_ADD(DATE_FORMAT(user.startDate,'%Y-%m-%d') + INTERVAL (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(user.startDate,'%Y')) YEAR, INTERVAL 364 DAY))           
        ) AS DATE)


La Query es bastante compleja.. pero basicamente lo que hace es segun la fecha que comenzo a trabajar y en que parte del ano esta ahora... calcula automaticamente el intervalo presente...

por ejemplo... si ahora que estamos en 2010 el usuario ya tuvo o no su proximo anivesario uso uno u otro intervalo que es calculado en el WEHRE

si empleado 2 comenzo: 12-12-2008 => intervalo actual es: 12-12-2009 --> 11-12-2010 (aun no cumplio su aniversario de 2010)
si empleado 3 comenzo: 20-11-2008 => intervalo actual es: 20-11-2010 --> 19-11-2011 (ya cumplio el aniversario en 2010 y ahora va por el de 2011)




es posible hacerlo completamente en MySQL sin necesidad de apoyarme en PHP por ejemplo?

si alguien cree que todo esta query pueda hacerla mas simple.. acepto recomendaciones :)


Muchas Gracias

Última edición por cruzz; 02/12/2010 a las 08:12
  #2 (permalink)  
Antiguo 07/12/2010, 08:56
 
Fecha de Ingreso: noviembre-2004
Ubicación: Montréal - Santa Fe
Mensajes: 140
Antigüedad: 19 años, 4 meses
Puntos: 2
Respuesta: Consulta recursiva

alguna ayudita???? .. comentario..... gracias :)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:08.