PDA

Ver la Versión Completa : consulta con tabla temporal para hacer acumulados


tgsistemas
17-03-2010, 10:37:33
Hola a tod@s,

estoy empezando con MySql, siempre he utilizado SQL2000 y las versiones express de éste. En sql2000 hacía consultas en tabla temporales para calcular datos de columnas contretas. Estoy intentando hacer lo mismo en mysql con esta query:


DROP TABLE tbtmptgs;

SELECT cdgo, centro, fecha, visitas, motnotot, motno01, motno02, motno03, motno04, motno05, segllam, vllamdec, impventas
into tbtmptgs
FROM tb03P WHERE centro = 1004 and fecha between '2010-03-01' and '2010-03-20'
SELECT centro,
max(fecha),
SUM(visitas) AS rvisitas,
SUM(motnotot) AS rmotnotot,
SUM(motno01) AS rmotnotot01,
SUM(motno02) AS rmotnotot02,
SUM(motno03) AS rmotnotot03,
SUM(motno04) AS rmotnotot04,
SUM(motno05) AS rmotnotot05,
SUM(segllam) AS rsegllam,
SUM(vllamdec) AS rvllamdec,
SUM(impventas) AS rimpventas
FROM tmptgs
GROUP BY centro

pero siempre me produce el error "unknown table tmptgs", lo estoy probando desde el navicat, no he probado a hacerlo desde phpmyadmin.

Alguien podría indicarme si la consulta es correcta por favor?

Saludos y Muchas Gracias

tgsistemas
17-03-2010, 13:25:53
lo he solventado de la siguiente forma :

SELECT max(centro),
max(fecha),
SUM(visitas) AS rvisitas,
SUM(motnotot) AS rmotnotot,
SUM(motno01) AS rmotnotot01,
SUM(motno02) AS rmotnotot02,
SUM(motno03) AS rmotnotot03,
SUM(motno04) AS rmotnotot04,
SUM(motno05) AS rmotnotot05,
SUM(segllam) AS rsegllam,
SUM(vllamdec) AS rvllamdec,
SUM(impventas) AS rimpventas
FROM tb03P WHERE centro = 1004 and fecha between '2010-03-01' and '2010-03-20'
GROUP BY centro

me he complicado yo solo ya que creo que no es necesario utilizar tablas temporales ni nada.

tgsistemas
18-03-2010, 19:02:18
tras utilizar el qry, añadiendo al sumatorio campos time (hh:mm:ss) he visto que
select sum(hllmndo) as hllmndo_suma,
sec_to_time(SUM(time_to_sec(hllmndo))) as hllmndo_sumaconvirtiendo
from tb03P

devuelven :
356900 37:29:00


atención a las funciones time_to_sec y sec_to_time

Soy novato con MySql pero entiendo, tras comprobar los datos y sumar los tiempos manualmente :o que la correcta es la opción convirtiendo a segundos, sumando y volviendo a convertir a formato hh:mm:ss pero me gustaría la confirmación de alguien con más experiencia al respecto.

Saludos y Muchas Gracias

movorack
18-03-2010, 19:51:28
(esto es una vana traducción del manual de referencia de mysql, lastimosamente esta salvedad no está en la versión en español)

Las funciones SUM y AVG no trabajan bien con valores temporales (estas convierten los valores temporales a numeros, perdiendo todo aquello que se encuentre despues de un caracter no numerico). Para solucionar este inconvenuente, se puede convertir el valor temporal a unidades numericas, aplicar la función y volverla a convertir en el valor temporal. Ejemplo:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;

Referencia: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

tgsistemas
19-03-2010, 11:43:41
gracias movorack, entendimos lo mismo ;)

entonces la qry es correcta con la segunda opción como pensaba
select sec_to_time(SUM(time_to_sec(hllmndo))) as hllmndo_sumaconvirtiendo
from tb03P


saludos y muchas gracias por la ayuda