Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   consulta con tabla temporal para hacer acumulados (https://www.clubdelphi.com/foros/showthread.php?t=66888)

tgsistemas 17-03-2010 10:37:33

consulta con tabla temporal para hacer acumulados
 
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:

Código SQL [-]
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 :
Código SQL [-]
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
Código SQL [-]
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/...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
Código:

select sec_to_time(SUM(time_to_sec(hllmndo))) as hllmndo_sumaconvirtiendo
from tb03P

saludos y muchas gracias por la ayuda


La franja horaria es GMT +2. Ahora son las 02:23:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi