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

[SOLUCIONADO] Vista de datos por año para cobertura sig

Estas en el tema de Vista de datos por año para cobertura sig en el foro de Mysql en Foros del Web. Hola gente, cómo va??!! Años leyéndolos para aprender y hoy hago la 1º consulta: Tengo la siguiente tabla con datos de expedientes: # reg_id, Num_Expediente, ...
  #1 (permalink)  
Antiguo 04/12/2015, 11:33
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Vista de datos por año para cobertura sig

Hola gente, cómo va??!!
Años leyéndolos para aprender y hoy hago la 1º consulta:
Tengo la siguiente tabla con datos de expedientes:

# reg_id, Num_Expediente, anio, Fecha_Entrada, Provincia, idjurisbahra, Instituticion, Campo, Nom_Titulo, Observa, Nom_resp_info, Fecha_Salida
1, 1271/15, 2015, 09/08/2000, BUENOS AIRES, 6, Ministerio de Educación de la provincia de Buenos Aires, Formación profesional, Cursos de formación profesional, no es competencia de esta Área la evaluación curricular de las certificaciones solicitadas en los 16 cuerpos del presente expediente N° 12711/15, ,
2, 11141/13, 2013, 14/02/2003, CABA, 2, INSTITUTO SUPERIOR DE ENSEÑANZA INTERCAMBIO (A-1289), PSICOLOGIA SOCIAL, "TECNICATURA SUPERIO EN PSICOLOGIA SOCIAL", , ,
3, 149345-04-8/02, 2002, 07/06/2005, BUENOS AIRES , 6, DIRECCIÓN DE CAPACITACIÓN DE TÉCNICOS DE LA SALUD DE LA PROVINCIA DE BUENOS AIRES, SALUD, TECNICATURA SUPERIOR EN TECNOLOGÍA EN SALUD CON ESPECIALIDAD EN LABORATORIO DE ANÁLISIS CLÍNICOS- TECNICATURA SUPERIOR EN TECNOLOGÍA EN SALUD CON ESPECIALIDAD EN INSTRUMENTACIÓN QUIRÚRGICA- TECNICATURA SUPERIOR EN TECNOLOGÍA EN SALUD CON ESPECIALIDAD EN RADIOLOGÍA- TECNICATURA SUPERIOR EN TECNOLOGÍA EN SALUD CON ESPECIALIDAD EN HISTOLOGÍA-, , ,
4, 8591/08, 2008, 17/08/2005, MISIONES, 54, INSTITUTO CRISTO REY, TURISMO, "TECNICATURA EN GESTION Y DESARROLLO TURISTICO", , ,
5, 160/06, 2006, 20/05/2006, CABA, 2, ESCUELA DE POLICIA"COMISARIO INSPECTOR EDUARDO VICTORIANO TARET", SEGURIDAD, TCNICO SUPERIOR EN SEGURIDAD PULICA, , ,
6, 1473539/05, 2005, 04/06/2006, SALTA, 66, ISP"JEAN PIAGET", SALUD, FONOAUDIOLOGO, , ,
7, 1061266/06, 2006, 21/07/2006, SALTA, 66, INSTITUTO SUPERIOR DE FORMACIÓN DOCENTE N° 6010, SALUD, TECNICATURA SUPERIOR EN LABORATORIO CON ORIENTACIÓN EN ENFERMEDADES TROPICALES Y ENDÉMICAS, , ,
8, 843/06, 2006, 28/07/2006, CABA, 2, GOBIERNO DE LA CIUDAD DE BUENOS AIRES-SECRETARIA DE EDUCACIÓN-SUBSECRETARIA DE EDUCACIÓN, SALUD ( ENTRE OTROS), TRADUCTORA DO TÉCNICO CIENTÍFICO-LITERARIO EN IDIOMA INGLES- TECNICATURA SUPERIOR EN ADMINISTRACIÓN DE SERVICIOS DE SALUD- ENFERMERÍA PROFESIONAL- TECNICATURA SUPERIOR EN SEGURIDAD AMBIENTAL- TECNICATURA SUPERIOR EN GUÍA DE TURISMO CON ESPECIALIZACIÓN EN LA CIUDAD DE BUENOS AIRES - TECNICATURA EN RECREACIÓN., , ,
9, 1196753/06, 2006, 15/08/2006, RIO NEGRO, 62, IT.ALTA CAPACITACION, SALUD, TECNICO EN PROTESIS DENTAL, , ,
10, 81/06, 2006, 25/11/2006, RIO NEGRO, 62, INSTITUTO SUPERIOR PATAGONICO A-023, HOTELERIA - TURISMO, TECNICATURA SUPERIOR EN ADMINISTRACION Y GESTION HOTELERA"-"ORGANIZACIÓN DE EVENTOS"- "TECNICATURA SUPERIOR EN TURISMO Y HOSPITALIDAD"- "ESPECIALISTA EN ARTE CULINARIO- CHEF-", , , SE REMITE AL INET- NO CORRESPONDE SU EVALUACION EN ESTA DIRECCION

Necesito armar una cobertura para mostrar la cantidad de expedientes, procesador por año y provincia, para hacer una serie de mapas que muestren la evolución.
He probado con subconsultas y con vistas y no he llegado a buen puerto, alguien me podría orientar.

Desde ya mil gracias!!
  #2 (permalink)  
Antiguo 04/12/2015, 11:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Vista de datos por año para cobertura sig

y que llevas de la consulta? cuales han sido tus pruebas?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/12/2015, 11:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Vista de datos por año para cobertura sig

Por lo pronto, si tienes una tabla con todo eso, como mínimo pare ser una tabla desnormalizada, lo que sería un error de diseño muy grave.
Por otro lado...
Cita:
Necesito armar una cobertura para mostrar la cantidad de expedientes, procesador por año y provincia, para hacer una serie de mapas que muestren la evolución.
He probado con subconsultas y con vistas y no he llegado a buen puerto, alguien me podría orientar.
Ok... Defineme "cobertura", porque la verdad no tengo ni idea de a qué te refieres.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 04/12/2015, 12:27
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

Hola gnzsoloyo, Gracias por responder
Cubertura, es un archivo de datos georreferenciados, puede ser un csv, por ejemplo:
# Provincia, 2005
BUENOS AIRES, 3
SALTA, 1

Este lo hago a partir de un query simple con count, más necesitaría obtener en el mismo csv los datos de los años 2006, 2007, 2008, etc. para que el programa qgis me los pueda levantar y poder representarlos en un mapa.

Necesitaría una salida como:

# Provincia,2005,2006,etc.
ESPAÑA, 6,,
CABA, 69,3
BUENOS AIRES, 31,56
CATAMARCA, 3,7
CORDOBA, 12,5
CORRIENTES, 68,23
CHACO, 15,,
CHUBUT, 6,2
JUJUY, 89,6
LA PAMPA, 12,9
LA RIOJA, 2,5
MENDOZA, 38,12
MISIONES, 42,7
NEUQUEN, 45,3
RIO NEGRO, 48,3
SALTA, 4,,
SAN JUAN, 29,2
SAN LUIS, 1,,
SANTA CRUZ, 10,54
SANTA FE, 23,87
TUCUMAN, 17,23
NACION, 2,45
TIERRA DEL FUEGO, ANTARTIDA E ISLAS DEL ATLANTICO SUR, 10,,

Me explico?
  #5 (permalink)  
Antiguo 04/12/2015, 12:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Vista de datos por año para cobertura sig

Mas o menos se va entendiendo.
Ahora bien, ¿Cual es la duda concreta?

Postea la query que haces, la estructura de tu base y explica claramente cuál es el problema a resolver. La descripción que haces es algo vaga e imprecisa.
En Bases de Datos tendemos a ser muy concretos en las cosas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/12/2015, 13:29
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

Ok, disculpas!!

La tabla es:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `territor_pgestionbdtmp`.`expedientes_historicos` (
  2.   `reg_id` INT(11) NOT NULL,
  3.   `Num_Expediente` VARCHAR(34) NULL DEFAULT NULL,
  4.   `anio` YEAR NULL DEFAULT NULL,
  5.   `Fecha_Entrada` VARCHAR(16) NULL DEFAULT NULL,
  6.   `Provincia` VARCHAR(53) NULL DEFAULT NULL,
  7.   `idjurisbahra` INT(4) NULL DEFAULT NULL,
  8.   `Instituticion` VARCHAR(93) NULL DEFAULT NULL,
  9.   `Campo` VARCHAR(56) NULL DEFAULT NULL,
  10.   `Nom_Titulo` VARCHAR(813) NULL DEFAULT NULL,
  11.   `Observa` MEDIUMTEXT NULL DEFAULT NULL,
  12.   `Nom_resp_info` VARCHAR(10) NULL DEFAULT NULL,
  13.   `Fecha_Salida` VARCHAR(65) NULL DEFAULT NULL,
  14.   PRIMARY KEY (`reg_id`))
  15. DEFAULT CHARACTER SET = utf8

El query que estoy usando es:

Código SQL:
Ver original
  1. SELECT Provincia, COUNT(*) AS '2005'
  2. FROM territor_pgestionbdtmp.expedientes_historicos
  3. WHERE anio= 2005
  4. GROUP BY idjurisbahra

Necesitaría sacar los otros años y jurisdicciones a partir de una sola consulta.


Mil gracias!!!

Última edición por gnzsoloyo; 04/12/2015 a las 13:41
  #7 (permalink)  
Antiguo 04/12/2015, 13:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Vista de datos por año para cobertura sig

Esa sola consulta, así como la planteas, está haciendo "desaparecer" los datos que quieres de los años, desde el momento en que no estás agrupando por año...
Tienes que modificarla.

Suponiendo que anio es la que contiene el numero del año sería:
Código MySQL:
Ver original
  1. SELECT Provincia,anio, COUNT(*) TotlaPOrPeriodo
  2. FROM territor_pgestionbdtmp.expedientes_historicos
  3. GROUP BY idjurisbahra, anio

Por cierto, poner una FECHA en un campo VARCHAR es un error de esos calamitosos... una fecha es un DATE, DATETIME o un TIMESTAMP, pero nunca es VARCHAR
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 04/12/2015, 15:26
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

IMPRESIONANTE!!!!

Hay alguna manera de que salgan los años como columnas y las jurisdicciones como filas?

VARCHAR: si es una tabla que migré de una planilla de cálculo y no le dediqué tiempo, más por ese campo no necesito filtrar.
Mil disculpas por la brutalidad ;-D

Otra pregunta, que libro/tutorial me recomendas sobre mysql? Es apasionante!!!!
  #9 (permalink)  
Antiguo 04/12/2015, 16:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Vista de datos por año para cobertura sig

Cita:
Hay alguna manera de que salgan los años como columnas y las jurisdicciones como filas?
Eso se llama tabla inversa, y no, no hay una forma fácil de que puedas hacerlo. Se recomienda hacerlo por programación y no por cosultas en SQL:
Algunos DBMS cuentan con capacidades especiales para hacer ese tipo de consultas (CUBE, por ejemplo), pero no son para principiantes, y en general la tarea se realiza con aplicativos específicos dedicados al BI y minería de datos.

En cuanto a un tutorial o libro, es más conocimiento y práctica de SQL que otra cosa.
DE todos modos mira el lik que aparece en este post: http://www.forosdelweb.com/f86/faqs-...3/#post4414201, te puede ayudar a orientar y experimentar con soluciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 04/12/2015, 18:16
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

OOppss!!! si en otros casos la inversión la hago con funciones de php, más pensé que desde mysql se podía hacer más simplemente.
Y con una tabla temporal, será mucho lío?

Mil gracias Gonzalo!!!! tu aporte es oro!!!
Quedo a tu disposición!!!

Nos leemos!!
  #11 (permalink)  
Antiguo 04/12/2015, 18:31
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

"Tabla inversa" (filas a columnas) acá encontré una forma de hacerla:
http://www.iteramos.com/pregunta/44498/mysql---filas-a-columnas

Nos leemos!!
  #12 (permalink)  
Antiguo 05/12/2015, 09:56
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

Gracias al invaluable aporte y acompañamiento de gnzsoloyo ("... eso se llama tabla inversa") encontré la solución a mi problema, con el siguiente query, las ordenes "view", "case when" y "sum" logramos armar una salida csv para incorporar a una vista de un sistema de información geográfico!!

Mil gracias!!! GONZALO!!!!

Código MySQL:
Ver original
  1. /*Invertir filas en columnas*/
  2. create OR REPLACE view expedientes_historial as (
  3.  
  4.     SELECT Provincia,anio, COUNT(*) TotlaPOrPeriodo
  5.     FROM territor_pgestionbdtmp.expedientes_historicos
  6.     GROUP BY idjurisbahra, anio
  7. );
  8.  
  9. create OR REPLACE view expedientes_historial_inversa as (
  10.     expedientes_historial.*,
  11.     case when anio = "2002" then TotlaPOrPeriodo end as '2002',
  12.     case when anio = "2003" then TotlaPOrPeriodo end as '2003',
  13.     case when anio = "2005" then TotlaPOrPeriodo end as '2005',
  14.     case when anio = "2006" then TotlaPOrPeriodo end as '2006',
  15.     case when anio = "2007" then TotlaPOrPeriodo end as '2007',
  16.     case when anio = "2008" then TotlaPOrPeriodo end as '2008',
  17.     case when anio = "2009" then TotlaPOrPeriodo end as '2009',
  18.     case when anio = "2010" then TotlaPOrPeriodo end as '2010',
  19.     case when anio = "2011" then TotlaPOrPeriodo end as '2011',
  20.     case when anio = "2012" then TotlaPOrPeriodo end as '2012',
  21.     case when anio = "2013" then TotlaPOrPeriodo end as '2013',
  22.     case when anio = "2014" then TotlaPOrPeriodo end as '2014',
  23.     case when anio = "2015" then TotlaPOrPeriodo end as '2015'
  24.   from expedientes_historial
  25. order by Provincia, anio
  26. );
  27. /*
  28. Select * from expedientes_historial_inversa
  29. */
  30. create OR REPLACE view expedientes_historial_cosmetica as (
  31.     Provincia,
  32.     sum(expedientes_historial_inversa.2002) as '2002',
  33.     sum(expedientes_historial_inversa.2003) as '2003',
  34.     sum(expedientes_historial_inversa.2005) as '2005',
  35.     sum(expedientes_historial_inversa.2006) as '2006',
  36.     sum(expedientes_historial_inversa.2007) as '2007',
  37.     sum(expedientes_historial_inversa.2008) as '2008',
  38.     sum(expedientes_historial_inversa.2009) as '2009',
  39.     sum(expedientes_historial_inversa.2010) as '2010',
  40.     sum(expedientes_historial_inversa.2011) as '2011',
  41.     sum(expedientes_historial_inversa.2012) as '2012',
  42.     sum(expedientes_historial_inversa.2013) as '2013',
  43.     sum(expedientes_historial_inversa.2014) as '2014',
  44.     sum(expedientes_historial_inversa.2015) as '2015'
  45.   from expedientes_historial_inversa
  46.   group by Provincia
  47. );
  48.  
  49. Select * from expedientes_historial_cosmetica
  50.  
  51. /*FIN*/

Mil Gracias Libras!!! Gonzalo ya me orientó más que bien!!

Nos leemos!!

Última edición por horacionomade; 05/12/2015 a las 10:07
  #13 (permalink)  
Antiguo 05/12/2015, 10:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Vista de datos por año para cobertura sig

Es una solución. No te la sugerí porque tiene muchísimos problemas, ente ellos de performance.
Además genera un exceso de acoplamiento entre aplicación y base, sin contar con cierta rigidez en el resultado, ya que tienes que harcodear toda la salida.
En realidad, si lo meditas puedes lograr exactamente lo mismo en programación, y hasta es posible que funcione más rápido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 05/12/2015, 14:41
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

Si, es verdad, tarda un par de segundos en responder.
Vos decís que si hago las consultas celda por celda con php la performance es mejor?
Es bueno saberlo!!!
  #15 (permalink)  
Antiguo 05/12/2015, 14:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Vista de datos por año para cobertura sig

No dije consultas...
Si ya tienes la tabla resultado, es mucho más fácil y eficiente mostrarla invertida en programación que lograr una consulta en SQL eficiente y optimizada.

Además eso me refiero.

Al menos en mi experiencia, logró con una docena de líneas en cualquier lenguaje lo mismo que con toda esa query.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 05/12/2015, 16:04
Avatar de horacionomade  
Fecha de Ingreso: diciembre-2015
Ubicación: Hurlingham, Buenos Aires
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Vista de datos por año para cobertura sig

Perfecto!!! mil gracias!!!!!

Etiquetas: año, campo, fecha, tabla, vista
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 17:53.