मैं मान रहा हूँ कि (patient_id, adherence_date, scheduled_time)
आपकी तालिका में अद्वितीय है, जिसका अर्थ है कि रोगी "स्लॉट" और तिथि के अनुसार एक बार बुकिंग कर सकता है।
with medication_adherences as(
-- This is your test data
select 10049 as patient_id, 1 as id, date '2017-10-01' as adherence_date, 'morning' as scheduled_time, timestamp '2017-10-31 19:59:19' as acknowledged_at from dual union all
select 10049 as patient_id, 2 as id, date '2017-10-01' as adherence_date, 'afternoon' as scheduled_time, null as acknowledged_at from dual union all
select 10049 as patient_id, 3 as id, date '2017-10-01' as adherence_date, 'night' as scheduled_time, timestamp '2017-10-31 19:59:19' as acknowledged_at from dual union all
select 10049 as patient_id, 4 as id, date '2017-10-02' as adherence_date, 'morning' as scheduled_time, timestamp '2017-10-31 19:59:19' as acknowledged_at from dual union all
select 10049 as patient_id, 5 as id, date '2017-10-02' as adherence_date, 'afternoon' as scheduled_time, timestamp '2017-10-31 19:59:19' as acknowledged_at from dual union all
select 10049 as patient_id, 6 as id, date '2017-10-02' as adherence_date, 'evening' as scheduled_time, timestamp '2017-10-31 19:59:19' as acknowledged_at from dual union all
select 10049 as patient_id, 7 as id, date '2017-10-02' as adherence_date, 'night' as scheduled_time, null as acknowledged_at from dual
)
select adherence_date
,sum(case when scheduled_time = 'morning' then nvl2(acknowledged_at,1,0) end) as morning
,sum(case when scheduled_time = 'afternoon' then nvl2(acknowledged_at,1,0) end) as afternoon
,sum(case when scheduled_time = 'evening' then nvl2(acknowledged_at,1,0) end) as evening
,sum(case when scheduled_time = 'night' then nvl2(acknowledged_at,1,0) end) as night
from medication_adherences
where patient_id = 10049
group
by adherence_date;
तर्क इस तरह काम करता है:
- यदि स्वीकृत_एट शून्य है तो हम कुल 0 (nvl2 के माध्यम से)
- यदि स्वीकार किया गया_at है नहीं शून्य तो हम कुल 1 (nvl2 के माध्यम से)
- यदि इस समयावधि के लिए कोई रिकॉर्ड नहीं है तो हम कुल शून्य (मामले के बाद से ... विफल)