@Ani; không có truy vấn phân cấp trong Hive để tạo bốn phần tư (1,2,3,4) vì vậy tôi tạo một bảng nhỏ cho nó. Sau đó, tôi nhận được tất cả bệnh nhân_id, năm và tháng tồn tại trong bảng ims_patology_activity_diagnosis. Cuối cùng, tôi đã tham gia đúng vào tất cả id bệnh nhân có thể có, năm và quý (1,2,3,4); Nếu id hoặc năm hoặc quý không tồn tại trong kết hợp phù hợp, thì sẽ không có hoạt động nào cho id, năm và quý đó. Tôi chỉ định hoạt động =0 cho các hàng đó. Tôi cũng chèn id bệnh nhân =200 để kiểm tra xem có nhiều id bệnh nhân hơn trong bảng hay không. Hi vọng điêu nay co ich. Cảm ơn.
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');