DELIMITER $$ CREATE PROCEDURE grafica() BEGIN DECLARE registros int; DECLARE años int; DECLARE meses int; DECLARE peso int; DECLARE vble_año int; DECLARE vble_mes int; DECLARE vble_peso int; DECLARE a int; SET a=1; // PASO 1: // TABLA TEMPORAL CON DATOS DE LA GRAFICA Y EL CAMPO QUE SE LLENARA CON LA INFORMACION REAL DEL PACIENTE //******************************************************************************************************* CREATE TEMPORARY TABLE tmp_tabla1 ( `edad` varchar(11) COLLATE utf8_bin NOT NULL, `edadmes` int(2) NOT NULL, `mes` decimal(10,2) NOT NULL, `menos3` decimal(10,2) NOT NULL, `menos2` decimal(10,2) NOT NULL, `menos1` decimal(10,2) NOT NULL, `media` decimal(10,2) NOT NULL, `mas1` decimal(10,2) NOT NULL, `mas2` decimal(10,2) NOT NULL, `mas3` decimal(10,2) NOT NULL, `atencion` decimal(10,2) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; // LA ANTERIOR TABLA SE LLENA DESDE UNA TABLA BASE DEPENDIENDO DEL TIPO DE GRAFICO Y DEL !! SEXO !! DEL PACIENTE QUE LLEGA EN UN ID. INSERT INTO tmp_tabla1(edad,edadmes,mes,menos3,menos2,menos1,media,mas1,mas2,mas3) SELECT edad,edadmes,mes,menos3,menos2,menos1,media,mas1,mas2,mas3 FROM tabla1; // PASO 2: // TABLA TEMPORAL CON FILTRO Y CALCULO DE EDAD-> AÑOS Y MESES : PARA UN PACIENTE ESPECIFICO Y DESDE UN PROGRAMA ESPECIFICO //************************************************************************************************************************* CREATE TEMPORARY TABLE filtro_tmp SELECT a.paciente_id,CAST(a.fecha_hora AS date) as fecha_a,a.fecha_hora,p.nacimiento,p.nombre_1,p.nombre_2,p.apellido_1,p.apellido_2,a.peso,a.talla,p.id,p.tipo_doc,p.documento,p.sexo, TIMESTAMPDIFF( YEAR, p.nacimiento,CAST(a.fecha_hora AS date)) as años, TIMESTAMPDIFF( MONTH, p.nacimiento,CAST(a.fecha_hora AS date) ) % 12 as meses FROM f_s_control_de_hipertension_arterial a INNER JOIN pacientes p ON a.paciente_id=p.id; // CON ESTO SE VERIFICA QUE SI SE CREO LA TABLA TEMPORAL CON EL FILTRO DE LOS DATOS //select * from filtro_tmp; // PASO 3: // CREO TABLA TEMPORAL CON LOS REGISTROS FILTRADOS QUE PERTENECEN A UN PACIENTE ESPECIFICO Y YA VIENEN DE UN PROGRAMA ESPECIFICO //***************************************************************************************************************************** CREATE TEMPORARY TABLE tbl_tmp_tokenuser (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, años BIGINT,meses BIGINT, peso INT); INSERT INTO tbl_tmp_tokenuser(años,meses,peso) SELECT años,meses,peso FROM filtro_tmp; select * from tbl_tmp_tokenuser; SET registros=(SELECT COUNT(*) FROM tbl_tmp_tokenuser); // PASO 4: // DESPUES DE HABER CREADO LA TABLA TEMPORAL Y CONTAR CUANTOS REGISTROS TIENE, SE PROCEDE A RECORRERLA PARA IR GRABANAOD EN CADA LINEA CONDICIONAL EL VALOR DEL PESO LEIDO (por ejemplo) // EN LA TABLA TEMPORAL DE DATOS LLAMADA TMP_TABLA1. //********************************************************************************************************************************************************************************* WHILE a <= registros DO SELECT años,meses,peso INTO vble_año,vble_mes,vble_peso FROM tbl_tmp_tokenuser WHERE id=a; UPDATE tmp_tabla1 SET atencion=vble_peso WHERE edad=vble_año and edadmes=vble_mes; SET a=a+1; END WHILE ; select * from tmp_tabla1; TRUNCATE TABLE tmp_tabla1; END; $$ DELIMITER ;