Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Abfrage zum Teilen von Daten

@Ani; Es gibt keine hierarchische Abfrage in Hive, um vier Viertel (1,2,3,4) zu erstellen, also erstelle ich eine kleine Tabelle dafür. Dann bekomme ich alle patient_id, Jahr und Monat, die in der Tabelle ims_patient_activity_diagnosis vorhanden sind. Schließlich habe ich alle möglichen Patienten-IDs, Jahre und Quartale (1,2,3,4) richtig verknüpft; Wenn die ID oder das Jahr oder Quartal nicht im richtigen Join vorhanden ist, gibt es keine Aktivität für diese ID, dieses Jahr und dieses Quartal. Ich weise diesen Zeilen Aktivität =0 zu. Ich habe auch die Patienten-ID =200 eingefügt, um zu testen, ob es mehr Patienten-IDs in der Tabelle gibt. Hoffe das hilft. Danke.

create table dbo.qtrs(month int);
insert into qtrs  values (1),(2),(3),(4);

select DISTINCT NVL(ims.id, qtr.id) as patient_id,
qtr.year as year,
qtr.month as month,
CASE WHEN ims.id > 0 THEN 1 ELSE 0 END as activity  
from sandbox_grwi.ims_patient_activity_diagnosis ims
right join (select distinct ims.id,YEAR(ims.month_dt) as year,qtrs.month from sandbox_grwi.ims_patient_activity_diagnosis ims join dbo.qtrs qtrs) qtr 
on (ims.id=qtr.id and YEAR(ims.month_dt)=qtr.year and INT((MONTH(month_dt)-1)/3)+1=qtr.month)
sort by patient_id, year, month;

Sample Result:
p_id    year    month   activity
100     2012    1       1
100     2012    2       0
100     2012    3       0
100     2012    4       0
100     2013    1       1
100     2013    2       1
100     2013    3       1
100     2013    4       0
100     2014    1       1
100     2014    2       1
100     2014    3       0
100     2014    4       1
100     2015    1       1
100     2015    2       0
100     2015    3       1
100     2015    4       1
100     2016    1       0
100     2016    2       1
100     2016    3       0
100     2016    4       1
200     2012    1       1
200     2012    2       0
200     2012    3       0
200     2012    4       0
200     2013    1       0
200     2013    2       1
200     2013    3       0
200     2013    4       0


additional sample data:
insert into sandbox_grwi.ims_patient_activity_diagnosis values
(200, '2012-03-01'), 
(200, '2013-04-01');