@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');