Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/05/2009, 14:40
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: calcular filas de dos select distintos

Debes darnos más datos, como pide el amigo huesos52, pero si has guardado fecha-hora de entrada y fecha-hora de salida en un mismo campo y marcado con otro campo o no (tal vez no sería necesario) la salida, te bastaría con agrupar por DATE_FORMAT(). Una consulta así te mostraría la hora de entrada y salida si sólo hay una el mismo día y las dos ocurren en el mismo día:

SELECT campotrabajador, DATE_FORMAT(campofecha,'%Y-%m-%d')dia, MIN(campofecha) entrada, MAX(campofecha)salida FROM nombretabla GROUP BY DATE_FORMAT(campofecha,'%Y-%m-%d'), campotrabajador

Luego veremos qué usar para mostrar sólo la hora en tu versión. Creo que la función de cadena substring -8 podría servir en tu versión

Código sql:
Ver original
  1. campotrabajador, SELECT DATE_FORMAT(campofecha,'%Y-%m-%d')dia, SUBSTRING(MIN(campofecha),-8) entrada, SUBSTRING(MAX(campofecha),-8)salida
  2.  FROM palabras GROUP BY DATE_FORMAT(campofecha,'%Y-%m-%d'), campotrabajador

No obstante, te diré que esto puede llevarte a error, pues no nos dices cómo marcas las entradas y salidas, si con E/S o simplemente piensas que te bastará con la diferencia horaria. Por otra parte, tampoco dices si en el mismo día podría haber varias entradas y salidas, lo que impediría usar esta consulta con garantía, igual que si entras un día y sales el siguiente.
Respecto a las diferencias, con una versión tan antigua tendrás que recurrir a UNIX_TIME
con algo así conseguirás los segundos:
SELECT campotrabajador, DATE_FORMAT(campofecha,'%Y-%m-%d')dia, SUBSTRING(MIN(campofecha),-8) entrada, substring(MAX(campofecha),-8)salida, (unix_timestamp(max(campofecha))- unix_timestamp(min(campofecha)))diferencia FROM palabras GROUP BY DATE_FORMAT(campofecha,'%Y-%m-%d'), campotrabajador

campotrabajador es el campo que te sirve para indicar el trabajador

Luego con FLOOR y MOD sacaremos la diferencia en un formato time.

Ah, y el mejor consejo de todos; si la versión de MySQL depende de ti, y no sólo del servidor, actualiza a una versión posterior a 4.1. Comprueba que versión usa tu servidor, porque lo mismo es más reciente y tú puedes actualizar la tuya y usar funciones como timediff, la recomendada por huesos52. Bastará con ella y te evitarás unix_timestamp, floor, mod, etc. (la diferencia no es poca, ¿verdad?)

Última edición por jurena; 04/05/2009 a las 01:11