From 7f4d65aa85870fd4d9ec0fe52236643689d37012 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?=
 <jvfpw18@inf.ufpr.br>
Date: Wed, 29 May 2019 10:13:32 -0300
Subject: [PATCH] Fix idm execution with more than 1 year

---
 idm.sql | 85 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 67 insertions(+), 18 deletions(-)

diff --git a/idm.sql b/idm.sql
index 6f4177a..212f53a 100644
--- a/idm.sql
+++ b/idm.sql
@@ -23,31 +23,80 @@ along with HOTMapper.  If not, see <https://www.gnu.org/licenses/>.
 
 CREATE TABLE indice_distribuicao_matriculas AS (
 
-    WITH div_estado AS (SELECT count(serie_ano_id) AS total_estado, serie_ano_id, estado_id
-    FROM matricula 
-    WHERE ano_censo=2017 AND tipo <= 3 AND dependencia_adm_id <=3
-    GROUP BY serie_ano_id, estado_id),
+    WITH div_estado AS
+        (SELECT count(serie_ano_id) AS total_estado, serie_ano_id, estado_id, ano_censo, localizacao_id
+        FROM matricula
+        WHERE ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_id <=3
+        GROUP BY serie_ano_id, estado_id, ano_censo, localizacao_id),
+
+    div_estado_mod AS
+        (SELECT count(serie_ano_id) AS total_estado_mod, cast(LEFT(serie_ano_id, 1) as integer) as serie_mod, estado_id,
+            ano_censo, localizacao_id
+        FROM matricula
+        WHERE ano_censo >= 2017 AND tipo <= 3 AND dependencia_adm_id <= 3
+        GROUP BY serie_mod, estado_id, ano_censo, localizacao_id),
     
-    div_brasil AS (SELECT sum(total_estado) AS total_brasil, serie_ano_id 
-    FROM div_estado
-    GROUP BY serie_ano_id),
+    div_brasil AS
+        (SELECT sum(total_estado) AS total_brasil, serie_ano_id, ano_censo, localizacao_id
+        FROM div_estado
+        GROUP BY serie_ano_id, ano_censo, localizacao_id),
+
+    div_brasil_mod AS
+        (SELECT sum(total_brasil) AS total_brasil_mod, cast(LEFT(serie_ano_id, 1) as integer) as serie_mod, ano_censo, localizacao_id
+        FROM div_brasil
+        GROUP BY serie_mod, ano_censo, localizacao_id),
     
     nivel_sim1 AS
-        (SELECT ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_brasil AS total_etapa,
-            cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 1 AS nivel_simulacao
+        (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_brasil AS total_etapa,
+            cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 1 AS nivel_simulacao,
+            matricula.localizacao_id
         FROM matricula JOIN div_brasil ON matricula.serie_ano_id=div_brasil.serie_ano_id
-        WHERE ano_censo=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
-        GROUP BY ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa),
+                                      AND matricula.ano_censo=div_brasil.ano_censo
+                                      AND matricula.localizacao_id=div_brasil.localizacao_id
+        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa,
+        matricula.localizacao_id),
     
     nivel_sim2 AS
-        (SELECT ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_estado AS total_etapa,
-            cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 2 AS nivel_simulacao
-        FROM matricula JOIN div_estado ON
-            matricula.serie_ano_id=div_estado.serie_ano_id AND matricula.estado_id=div_estado.estado_id
-        WHERE ano_censo=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
-        GROUP BY ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa)
-    
+        (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_estado AS total_etapa,
+            cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 2 AS nivel_simulacao,
+            matricula.localizacao_id
+        FROM matricula JOIN div_estado ON matricula.serie_ano_id=div_estado.serie_ano_id
+                                       AND matricula.estado_id=div_estado.estado_id
+                                       AND matricula.ano_censo=div_estado.ano_censo
+                                       AND matricula.localizacao_id=div_estado.localizacao_id
+        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa,
+        matricula.localizacao_id),
+
+    nivel_sim1_mod AS
+        (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod as serie_ano_id,
+            total_brasil_mod AS total_etapa, cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice,
+            1 AS nivel_simulacao, matricula.localizacao_id
+        FROM matricula JOIN div_brasil_mod ON LEFT(matricula.serie_ano_id, 1)=div_brasil_mod.serie_mod
+                                           AND matricula.ano_censo=div_brasil_mod.ano_censo
+                                           AND matricula.localizacao_id=div_brasil_mod.localizacao_id
+        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod, total_etapa,
+        matricula.localizacao_id),
+
+    nivel_sim2_mod AS
+        (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod as serie_ano_id,
+            total_estado_mod AS total_etapa, cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice,
+            2 AS nivel_simulacao, matricula.localizacao_id
+        FROM matricula JOIN div_estado_mod ON LEFT(matricula.serie_ano_id, 1)=div_estado_mod.serie_mod
+                                           AND matricula.estado_id=div_estado_mod.estado_id
+                                           AND matricula.ano_censo=div_estado_mod.ano_censo
+                                           AND matricula.localizacao_id=div_estado_mod.localizacao_id
+        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod, total_etapa,
+        matricula.localizacao_id)
+
 SELECT * FROM nivel_sim1 
 UNION ALL 
 SELECT * FROM nivel_sim2
+UNION ALL
+SELECT * FROM nivel_sim1_mod
+UNION ALL
+SELECT * FROM nivel_sim2_mod
 );
-- 
GitLab