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

Como sumar el ultimo registro de tres tablas...

Estas en el tema de Como sumar el ultimo registro de tres tablas... en el foro de Mysql en Foros del Web. Hola ... soy panfilo... tengo un problema para sumar el ultimo registro de tres tablas... (P1 + P2 + P3 = ????) no se como ...
  #1 (permalink)  
Antiguo 04/08/2013, 09:35
 
Fecha de Ingreso: agosto-2013
Mensajes: 1
Antigüedad: 10 años, 8 meses
Puntos: 0
Como sumar el ultimo registro de tres tablas...

Hola ... soy panfilo... tengo un problema para sumar el ultimo registro de tres tablas... (P1 + P2 + P3 = ????) no se como hacerlo.

Saludos a todos.

tabla1
Código SQL:
Ver original
  1. CREATE TABLE `prueba`.`tabla1` (
  2. `ID` tinyint( 4 ) NOT NULL AUTO_INCREMENT ,
  3. `Fecha` VARCHAR( 10 ) NOT NULL ,
  4. `PROVINCIA` VARCHAR( 2 ) NOT NULL ,
  5. `Ubicacion` VARCHAR( 19 ) NOT NULL ,
  6. `P1` VARCHAR( 2 ) NOT NULL ,
  7. PRIMARY KEY ( `ID` )
  8. ) ENGINE = MYISAM DEFAULT CHARSET = armscii8;

tabla2
Código MySQL:
Ver original
  1. CREATE TABLE `prueba`.`tabla2` (
  2. `Fecha` varchar( 10 ) NOT NULL ,
  3. `PROVINCIA` varchar( 2 ) NOT NULL ,
  4. `Ubicacion` varchar( 19 ) NOT NULL ,
  5. `P2` varchar( 2 ) NOT NULL ,
  6. PRIMARY KEY ( `ID` )
  7. ) ENGINE = MYISAM DEFAULT CHARSET = armscii8;

tabla3
Código MySQL:
Ver original
  1. CREATE TABLE `prueba`.`tabla3` (
  2. `Fecha` varchar( 10 ) NOT NULL ,
  3. `PROVINCIA` varchar( 2 ) NOT NULL ,
  4. `Ubicacion` varchar( 19 ) NOT NULL ,
  5. `P3` varchar( 2 ) NOT NULL ,
  6. PRIMARY KEY ( `ID` )
  7. ) ENGINE = MYISAM DEFAULT CHARSET = armscii8;

Última edición por gnzsoloyo; 06/08/2013 a las 14:54
  #2 (permalink)  
Antiguo 04/08/2013, 10:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Como sumar el ultimo registro de tres tablas...

Hola,

Si las tablas no están relacionadas necesitas hacer subconsultas con UNION.

Cita:
Iniciado por panfilo2013 Ver Mensaje
... tengo un problema para sumar el ultimo registro de tres tablas... (P1 + P2 + P3 = ????) no se como hacerlo.
Primero seleccciona el último registro de cada una de las tablas, algo así,

Código:
select id, fecha from tabla1 order by fecha desc limit 1
Une todos las tablas con la cláusual UNION, algo así,

Código:
select * from (select anterior tabla1 ...) a union all
select * from (select anterior tabla2 ...) b union all
select * from (select anterior tabla3 ...) c
Por último ejecuta la consulta con la función de agregado, algo así,

Código:
select sum(a.campo) from (select anterior ...) a
Junta todo eso en una sola consulta,
Si las tablas están relacionadas entre sí entonces es otro el procedimiento,

Saludos,
  #3 (permalink)  
Antiguo 06/08/2013, 14:51
 
Fecha de Ingreso: febrero-2012
Ubicación: Quito
Mensajes: 22
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Como sumar el ultimo registro de tres tablas...

Estas hablando de sumar o unir?, los campos que quieres sumar son varchar, si estas almacenando numeros y los quieres sumar, basta con hacer un CONVERT o un CAST y se aplica el concepto de "select (P1+P2+P3) from..."

Caso contrario, si quieres unir los campos (porque son texto) es el union que ya se ha mencionado.
  #4 (permalink)  
Antiguo 07/08/2013, 13:00
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Como sumar el ultimo registro de tres tablas...

Hola,

Cita:
Iniciado por EsteBusta Ver Mensaje
Estas hablando de sumar o unir?, los campos que quieres sumar son varchar, si estas almacenando numeros y los quieres sumar, basta con hacer un CONVERT o un CAST y se aplica el concepto de "select (P1+P2+P3) from..."

Caso contrario, si quieres unir los campos (porque son texto) es el union que ya se ha mencionado.
El único problema que miro con tu propuesta de simplemente hacer P1 + P2 + P3 para sumar o unir, es que, según lo que indica panfilo, cada valor viene de una tabla diferente.

Cita:
Iniciado por panfilo2013 Ver Mensaje
... tengo un problema para sumar el ultimo registro de tres tablas...
Es decir, tabla1, tabla2, tabla3. Si las tablas no están relacionadas, no creo que sea posible hacer un P1 + P2 + P3 sin obtener un producto cartesiano de la unión, y de allí adivinar cual es el que representa el último de cada tabla.

Aunque si son varchar y quiere sumar seguramente va a tener que aplicar en algún momento un CAST con la estructura mostrada anteriormente. Y si quiere concatenar en el último select tiene los valores que quiere 'unir'.

Saludos,
  #5 (permalink)  
Antiguo 08/08/2013, 05:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Como sumar el ultimo registro de tres tablas...

Primero deberías aclarar que es lo que quieres hacer.... sumar números o concatenar cadenas.

Segundo deberías decir que registro consideras el último, el que tenga la fecha más alta o el que tenga el identificador más alto, des del punto de vista de la bbdd el último registro entrado es el que tiene el identificador más alto, pero podría tener una fecha muy antigua.

Si quieres la fecha mas alta
...order by fecha desc limit 1

si quieres el ultimo registro entrado
...order by id desc limit 1

Si es sumar numeros....


Primero me plantearia cambiar el tipo de datos del campo para simplificar de VARCHAR( 2 ) a integer, o el que sea.

Código MySQL:
Ver original
  1. SELECT SUM(Sbc.valor) FROM
  2. (select p1 valor from tabla1 order by fecha desc limit 1
  3. select p2 valor from tabla2 order by fecha desc limit 1
  4. select p3 valor from tabla3 order by fecha desc limit 1) Sbc

Sin cambiar el tipo deberás usar la función CAST(campo,tipo) donde "tipo" debería ser uno de los numéricos posibles

DECIMAL[(M[,D])]
SIGNED [INTEGER]
UNSIGNED [INTEGER]

dependiendo del tipo de números que tengas almacenados. Supongamos que es un entero sin signo

Código MySQL:
Ver original
  1. SELECT SUM(Sbc.valor) FROM
  2. (select CAST(p1,UNSIGNED) valor from tabla1 order by fecha desc limit 1
  3. select CAST(p2,UNSIGNED) valor from tabla2 order by fecha desc limit 1
  4. select CAST(p3,UNSIGNED) valor from tabla3 order by fecha desc limit 1) Sbc



Si se trata de unir cadenas

Código MySQL:
Ver original
  1. (select p1 cadena from tabla1 order by fecha desc limit 1
  2. select p2 cadena from tabla2 order by fecha desc limit 1
  3. select p3 cadena from tabla3 order by fecha desc limit 1) Sbc

http://docs.oracle.com/cd/E17952_01/...n_group-concat

Creo...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 08/08/2013 a las 05:42

Etiquetas: tabla
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 16:55.