Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

तिथि के अनुसार एकाधिक रिकॉर्ड एकत्रित करना

मैं मान रहा हूँ कि (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 के माध्यम से)
  • यदि इस समयावधि के लिए कोई रिकॉर्ड नहीं है तो हम कुल शून्य (मामले के बाद से ... विफल)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैरेक्टर ऑरैकल के बाद स्ट्रिंग कैसे प्राप्त करें?

  2. ओरेकल:एक बड़ी एक्सएमएल फाइल लोड हो रही है?

  3. GetOracleDecimal मेमोरी लीक

  4. मैं docker Oracle उदाहरण से कैसे जुड़ सकता हूँ?

  5. वेब एपीआई द्वारा लौटाए गए बड़े JSON डेटा से निपटना