entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Con respecto a la funcion SUM que me podrian decir al respecto al momento de mostrar los total de las cantidades en un campo temporal...
es verdad o es falso que esta funcion no trabaja bien con valores temporales?, por lo que he leído en varios sitios menciona que lo convierte a temporal a numeros y se tiene que volver a convertir en un valor temporal, necesito saber si es asi. Gracias.

0voto

Leonardo-Tadei comentado

La query en cuestión? La estructura de las tablas involucradas?

a qué estás llamando "campo temporal"? Al devuelto por un cálculo?

0voto

Cristi_C comentado

Asi es al devuelto por un cálculo por ejemplo: en este query me devuelve el total de horas laboradas, del trabajador, se ocurrio aplicar la funcion SUM para que me de el total de 20 horas del trabajador 1489 y poder evitar los registros repetidos, puesto que el tipo de dato que estoy manejando para horas de entrada y salida es de tipo datetime solo muestro H:m:s,
id clave hora_entrada hora_salida total_horas_laboradas
1 1489 7:00:00 17:00:00 10
2 1489 7:00:00 17:00:00 10

cuando aplico el group by solo me muestra el ultimo registro de ese empleado no se como aplicar la funcion SUM en el resultado devuelto en el campo TOTAL y que sume las 20 horas laboradas

este es mi query
SELECT RA.ID_REGISTRO_ASISTENCIA,T.CLAVE_TRABAJADOR,DATE_FORMAT(RA.REGISTRO_HORA_ENTRADA,'%H:%i:%s'),DATE_FORMAT(RA.REGISTRO_HORA_SALIDA,'%H:%i:%s'),TIMEDIFF(RA.REGISTRO_HORA_SALIDA,RA.REGISTRO_HORA_ENTRADA) AS TOTAL FROM REGISTRO_ASISTENCIA RA,TRABAJADOR T GROUP BY T.CLAVE_TRABAJADOR;

0voto

Leonardo-Tadei comentado

Los datos que querés proyectar tienen la forma:

id_trabajador   |   Total Horas

o tienen aforma:

id_trabajador  | hora_entrada  |  hora_salida  |  total_del_día |  total_acumulado

???

En el primer caso, tendrás un registro por trabajador con el total de las horas.

En el segundo caso, tendrás las horas de todos los días y al lado un total que se irá acumulando registro a registro.

Supongo que con el primer caso te es suficiente, porque lo que se quiere saber es cuántas horas trabajó cada trabajador sin importar cuándo...

0voto

Cristi_C comentado

es como en el segundo caso
id_trabajador | hora_entrada | hora_salida | total_del_día | total_acumulado

1 Respuesta

1voto

Leonardo-Tadei Puntos227020

Hola @Cristi_C

tal vez con algún error de sintaxis por escribirlo acá, la query que proyecta los datos que necesitás es:

SELECT RA.IDREGISTROASISTENCIA,T.CLAVETRABAJADOR, DATEFORMAT(RA.REGISTROHORAENTRADA,'%H:%i:%s'), DATEFORMAT(RA.REGISTROHORASALIDA,'%H:%i:%s'), TIMEDIFF(RA.REGISTROHORASALIDA,RA.REGISTROHORAENTRADA) AS SUBTOTAL,
( SELECT SUM(TIMEDIFF(REGISTROASISTENCIA.REGISTROHORASALIDA,REGISTROASISTENCIA.REGISTROHORAENTRADA)
FROM REGISTROASISTENCIA
WHERE RA.IDREGISTROASISTENCIA=REGISTROASISTENCIA.IDREGISTROASISTENCIA
AND REGISTROASISTENCIA.IDREGISTROASISTENCIA <= RA.IDREGISTROASISTENCIA
) AS TOTAL_ACUMULADO
FROM REGISTROASISTENCIA RA,TRABAJADOR T 
WHERE T.CLAVETRABAJADOR=1489;

Es decir, el total acumulado es una subquery que suma las diferencias de todas las horas desde el registro actual para atrás; el GROUP BY queda solo adentro de la subquery. El uso de alias es para desambiguar en la query si el campo es de la subquery o no.

Lo que tienen de malo este tipo de querys es que muestran resultados legibles solo si se consulta por un solo trabajador, ya que si hay registros de varios trabajadores, el TOTAL_ACUMULADO deja de tener sentido.

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta