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

Vista en MySQL

Estas en el tema de Vista en MySQL en el foro de Mysql en Foros del Web. Buenos días, tengo un problema que es de bastante urgencia y no tengo ni idea de como lo puedo solucionar. Tengo una tabla que contiene ...
  #1 (permalink)  
Antiguo 01/06/2016, 12:24
 
Fecha de Ingreso: septiembre-2011
Mensajes: 35
Antigüedad: 12 años, 7 meses
Puntos: 0
Exclamación Vista en MySQL

Buenos días, tengo un problema que es de bastante urgencia y no tengo ni idea de como lo puedo solucionar.

Tengo una tabla que contiene registros con los siguientes datos.

cedula, hora, entrada, fecha (entre otros pero estos son los importantes), les dejo aqui también el formato como esta guardado.

hora (yyyy-mm-dd hh-mm-ss)
entrada (I/O) Int Out
fecha (yyyy-mm-dd)

De esta tabla tengo 2 vistas creadas, una para las entradas (I) y otra para las salidas (O).
Y de estas 2 vistas anteriormente creadas tengo otra que seria lo siguiente:

Código MySQL:
Ver original
  1.     DEFINER = `root`@`localhost`
  2. VIEW `v_todo` AS
  3.     SELECT
  4.         `v_ntrada`.`Cedula` AS `cedula`,
  5.         `v_ntrada`.`Nombre` AS `nombre`,
  6.         `v_ntrada`.`Fecha` AS `fecha`,
  7.         `v_ntrada`.`hora` AS `entrada`,
  8.         `v_salida`.`hora` AS `salida`,
  9.                     `v_ntrada`.`hora`,
  10.                     `v_salida`.`hora`)) AS `TotalHoras`
  11.     FROM
  12.         (`v_ntrada`
  13.         JOIN `v_salida` ON (((`v_ntrada`.`Fecha` = `v_salida`.`Fecha`)
  14.             AND (`v_ntrada`.`Cedula` = `v_salida`.`Cedula`)
  15.             AND (`v_ntrada`.`hora` < `v_salida`.`hora`))))
  16.     WHERE
  17.         ((`v_ntrada`.`Registrado` = 'NO')
  18.             AND (`v_salida`.`Registrado` = 'NO'))
  19.     GROUP BY `v_ntrada`.`hora` , `v_ntrada`.`Cedula`
  20.     ORDER BY `v_salida`.`Nombre`

Como ven aquí saco las duplas de cada día pero el problema lo tengo cuando una persona entra a las 18:00:00 y sale a las 00:00:00 por lo tanto la parde te (`v_ntrada`.`Fecha` = `v_salida`.`Fecha`) no me funciona (lo mismo pasa cuando entran a las 00:00:00 (siempre entran unos minutos antes) y salen a las 06:00:00).
Al no tener los pares (Entrada y Salida) no puedo calcular las horas que trabajaron y esto me complica mucho.
Si alguien tiene una idea de como hacerlo se lo agradezco

Saludos

Última edición por gnzsoloyo; 01/06/2016 a las 12:59
  #2 (permalink)  
Antiguo 01/06/2016, 13:03
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Vista en MySQL

Es un problema característico, y para poder crear la consulta necesitas mapear el resultado en tres subconsultas, con UNION.
La primera debe tomar los tiempos entre las 00:00:00 y la hora de salida, cuando el inicio haya sido anterior a las cero horas del mismo dia de la finalizacion.
La segunda debe devolver solo los resultados entre las 00:00:00 y las 23:59:59, del mismo día.
La tercera debe devolver los que se iniciaron en un dia, pero terminaron en el siguiente, pero solo tomar el segmento de tiempo entre su hora de inicio y las 23:59:59.

Nota: En el caso de la tercera al resultado final de cada caso se le debe sumar 1 segundo, para comenzar el segundo perdido al cerrar el periodo a las 59:59 de las 11 de la noche.

¿Se entiende la lógica?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 01/06/2016, 13:54
 
Fecha de Ingreso: septiembre-2011
Mensajes: 35
Antigüedad: 12 años, 7 meses
Puntos: 0
Emm se entiende la lógica pero maso, seria mucha molestia un ejemplo como para poder redondear la idea y ver como puedo hacer el código sino es mucha molestia?

Gracias por contestar.

Última edición por gnzsoloyo; 03/06/2016 a las 06:39

Etiquetas: fecha, join, registros, select, sql, tabla, vista
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 18:21.