@अनी; हाइव में चार तिमाहियों (1,2,3,4) बनाने के लिए कोई पदानुक्रमित क्वेरी नहीं है, इसलिए मैं इसके लिए एक छोटी तालिका बनाता हूं। तब मुझे सभी रोगी_आईडी, वर्ष और महीने मिलते हैं जो ims_patient_activity_diagnosis तालिका में मौजूद हैं। अंत में, मैंने सभी संभावित रोगी आईडी, वर्ष और तिमाहियों (1,2,3,4) पर राइट जॉइन किया; यदि सही जॉइन में आईडी या वर्ष या तिमाही मौजूद नहीं है, तो उस आईडी, वर्ष और तिमाही के लिए कोई गतिविधि नहीं है। मैं उन पंक्तियों के लिए गतिविधि =0 असाइन करता हूं। तालिका में अधिक रोगी आईडी हैं या नहीं, यह जांचने के लिए मैंने रोगी आईडी =200 भी डाला। उम्मीद है ये मदद करेगा। धन्यवाद।
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');