Moderator Control Panel ]

Happy Friday เอา Function ของ postgresql มาฝากค่ะ

เรื่องรายงาน SQL command แลกเปลี่ยน รายงาน

Moderator: zatanofmonk, julaluk, thiwatip, bigdevil88

Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย pakee_06 » ศุกร์ 16 มี.ค. 2012 3:08 pm

เป็น Function สำหรับ Postgres version 8.4 นะคะ ของ 8.0 ไม่แน่ใจว่าใช้ได้หรือเปล่า ^^ (พี่ๆ ลองดูนะคะ)
คำสั่งนี้ คือ array_to_string และ array_agg เป็นฟังก์ชันที่เอาค่าที่ถูก group มาต่อกัน ผลลัพธ์ที่ได้ จะได้ดังรูปนะคะ

รูปภาพ

รายละเอียดเพิ่มเติมอ่านได้จาก
http://www.postgresql.org/docs/8.4/static/functions-array.html
http://www.postgresql.org/docs/8.4/static/functions-aggregate.html

ตัวอย่างนำคำสั่งไปใช้ในรายงาน

โค้ด: เลือกทั้งหมด
SELECT distinct
b_site.b_visit_office_id   as PCUCODE
,t_health_family.health_family_hn_hcis as PID
,t_visit.visit_vn as SEQ
,visit_primary_symptom_main_symptom as อาการสำคัญ
,visit_primary_symptom_current_illness  as อาการปัจจุบัน

,CASE  WHEN  q2.physical_exam is not null
                THEN q2.physical_exam
                ELSE 'ไม่ตรวจ' END as PHYSICAL_EXAM
,CASE  WHEN  t_diag_icd10.f_diag_icd10_type_id is not null
                THEN doc_diag.employee_firstname || ' ' || doc_diag.employee_lastname
                ELSE q3.employee_firstname || ' ' || q3.employee_lastname  END as DOCTOR
,substr(q1.visit_vital_sign_blood_presure,1,position('/'
        in q1.visit_vital_sign_blood_presure)-1) as SBP
,substr(q1.visit_vital_sign_blood_presure,position('/'
        in q1.visit_vital_sign_blood_presure)+1,(length(
            q1.visit_vital_sign_blood_presure)-position('/'
            in q1.visit_vital_sign_blood_presure))) as DBP
,q1.visit_vital_sign_temperature as TEMP
,q1.visit_vital_sign_weight as WEIGHT
,q1.visit_vital_sign_height as HEIGHT
,CASE  WHEN  q1.visit_vital_sign_waistline =''
       THEN '0'
       ELSE round(cast(q1.visit_vital_sign_waistline as numeric)) END as WAIST_CM
,q1.visit_vital_sign_hips as HIP_CM
,q1.visit_vital_sign_heart_rate as PULSE
,q1.visit_vital_sign_respiratory_rate as RESPIRATION
,CASE  WHEN length(t_visit.visit_begin_visit_time)>18
      THEN (to_number(substring(t_visit.visit_begin_visit_time,1,4),'9999')-543 )     
                        || substring(t_visit.visit_begin_visit_time,6,2)     
                        || substring(t_visit.visit_begin_visit_time,9,2)
                        || substring(t_visit.visit_begin_visit_time,12,2)
                        || substring(t_visit.visit_begin_visit_time,15,2)
                        || substring(t_visit.visit_begin_visit_time,18,2) 
        ELSE ''  END AS D_UPDATE 

FROM
t_patient INNER JOIN t_visit  on t_patient.t_patient_id = t_visit.t_patient_id
           INNER JOIN t_health_family on t_patient.t_health_family_id =  t_health_family.t_health_family_id
           LEFT JOIN (SELECT t_visit_primary_symptom.t_visit_id as t_visit_id
                        ,array_to_string(array_agg(visit_primary_symptom_main_symptom),',')  as visit_primary_symptom_main_symptom
                        ,array_to_string(array_agg(visit_primary_symptom_current_illness),',')  as visit_primary_symptom_current_illness
                      FROM t_visit INNER JOIN t_visit_primary_symptom on t_visit_primary_symptom.t_visit_id  = t_visit.t_visit_id
                        where visit_primary_symptom_active = '1' and substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
                              AND substring(t_visit.visit_begin_visit_time,1,10) <=  '2554-01-05'
                      GROUP BY t_visit_primary_symptom.t_visit_id) as q0
                                on  q0.t_visit_id = t_visit.t_visit_id
           LEFT JOIN t_visit_service on t_visit_service.t_visit_id = t_visit.t_visit_id
           LEFT JOIN  t_visit_vital_sign on (t_visit_vital_sign.t_visit_id = t_visit.t_visit_id)
           INNER JOIN t_diag_icd10 ON (t_visit.t_visit_id = t_diag_icd10.diag_icd10_vn  and t_diag_icd10.diag_icd10_active = '1')
           INNER JOIN b_visit_clinic  ON (t_diag_icd10.b_visit_clinic_id = b_visit_clinic.b_visit_clinic_id)
           INNER JOIN b_employee doc_diag on doc_diag.b_employee_id = t_diag_icd10.diag_icd10_staff_doctor
           LEFT JOIN (SELECT
                            t_visit_vital_sign.t_visit_id as t_visit_id,visit_vital_sign_blood_presure,visit_vital_sign_weight,visit_vital_sign_temperature
                            ,visit_vital_sign_height,visit_vital_sign_waistline,visit_vital_sign_heart_rate,visit_vital_sign_respiratory_rate,visit_vital_sign_hips
                       FROM t_visit INNER JOIN t_visit_vital_sign on t_visit_vital_sign.t_visit_id  = t_visit.t_visit_id
                       WHERE  visit_vital_sign_active = '1' and visit_vital_sign_blood_presure <> ''
                       and  substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
                              AND substring(t_visit.visit_begin_visit_time,1,10) <=  '2554-01-05'
                       GROUP BY t_visit_vital_sign.t_visit_id,visit_vital_sign_blood_presure,record_date,record_time,visit_vital_sign_weight,visit_vital_sign_heart_rate
                               ,visit_vital_sign_height,visit_vital_sign_waistline,visit_vital_sign_temperature,visit_vital_sign_respiratory_rate,visit_vital_sign_hips
                       ORDER BY record_date,record_time ) as q1
            ON q1.t_visit_id = t_visit.t_visit_id
        LEFT JOIN (SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,array_to_string(array_agg(visit_physical_exam_body || ':' || visit_physical_exam_detail), ', ')  as physical_exam
                      FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id  = t_visit.t_visit_id
                    WHERE      substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
                              AND substring(t_visit.visit_begin_visit_time,1,10) <=  '2554-01-05'
                      GROUP BY t_visit_physical_exam.t_visit_id
) as q2
            ON q2.t_visit_id = t_visit.t_visit_id

            LEFT JOIN (SELECT t_visit_service.t_visit_id,b_employee.employee_firstname , b_employee.employee_lastname,t_visit_service.assign_date_time
                    from b_employee inner join t_visit_service on b_employee.b_employee_id = t_visit_service.visit_service_staff_doctor
                                    inner join t_visit on t_visit.t_visit_id = t_visit_service.t_visit_id
                    WHERE      substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
                              AND substring(t_visit.visit_begin_visit_time,1,10) <=  '2554-01-05'
                    GROUP BY t_visit_service.t_visit_id,b_employee.employee_firstname , b_employee.employee_lastname,t_visit_service.assign_date_time
                    ORDER BY t_visit_service.assign_date_time ) as q3
            ON q3.t_visit_id = t_visit.t_visit_id

,b_site
WHERE
  t_visit.f_visit_status_id <> '4'       
    AND health_family_active = '1'
    AND t_diag_icd10.diag_icd10_active = '1'
    AND substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
    AND substring(t_visit.visit_begin_visit_time,1,10) <=  '2554-01-05'
ORDER BY SEQ
pakee_06
มือวางอันดับ 1
มือวางอันดับ 1
 
โพสต์: 507
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย chumsin » เสาร์ 17 มี.ค. 2012 1:00 pm

Concat :D
แนะนำการโพสรูปด้วยpicasa http://www.hospital-os.com/th/phpbb/viewtopic.php?f=4&t=2776
แก้ไขลายเซ็น กด http://www.hospital-os.com/th/phpbb/ucp.php?i=profile&mode=signature

Mr. Chumsin Sriyan thapae Hospital Satun
Nhso zone 12

Server-IBM.Ram4G
OS -UBUNTU 11.04 64-bit
Hospital-OS Version. -Hos3.9.20bulid01
Postgresql-8.4.x
Backup HP ram2G -Slony-I
ภาพประจำตัวสมาชิก
chumsin
ระดับเทพแห่งเว็บบอร์ด HospitalOS
ระดับเทพแห่งเว็บบอร์ด HospitalOS
 
โพสต์: 1620
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย k2003 » เสาร์ 17 มี.ค. 2012 7:49 pm

ศุกร์ หน้า มาอีกนะ :mrgreen:
Bansang Hospital ขึ้นระบบ 2 กุมภาพันธ์ 2546 สปสช เขต 6

Server Dell R410 Two Six Core Intel(R) Xeon 3.0 GHz Memory 32 G with ECC
Main Server FreeBSD 8.3 amd64 PostgreSQL 9.1 Architecture amd64
Module Image,Dental,Welfare-จ่ายตรง, LIS
ภาพประจำตัวสมาชิก
k2003
มือวางอันดับ 3
มือวางอันดับ 3
 
โพสต์: 162
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย Nan_Y2K » เสาร์ 17 มี.ค. 2012 9:59 pm

มีประโยชน์มากมาย

เช่น คนไข้ 1 คนมารับบริการหลายวัน คิวรี่ออกมาจะได้อยู่บรรทัดเดียวซะที
โรงพยาบาลลาดยาว จ.นครสวรรค์
http://www.ladyao.org
-----------------------------------
นฤพล แก้วชิงดวง
สาบานว่ารัก HospitalOS
-----------------------------------

Server Status :
Master Server Ubuntu10.04 64bit / PostgresPlus8.4 / HospitalOS3.9.19build07
Slave Backup with Slony

Module : Welfare / Dental / LabLis / NCD / Image
ภาพประจำตัวสมาชิก
Nan_Y2K
ระดับมืออาชีพ
ระดับมืออาชีพ
 
โพสต์: 616
ลงทะเบียนเมื่อ: จันทร์ 29 ธ.ค. 2003 12:00 am
ที่อยู่: โรงพยาบาลลาดยาว

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย pakee_06 » อาทิตย์ 18 มี.ค. 2012 1:44 pm

k2003 เขียน:ศุกร์ หน้า มาอีกนะ :mrgreen:

:mrgreen: :mrgreen: :mrgreen: นู๋สัญญาว่าจะมาแล้ว Post บ่อยๆ ค่า ^^
pakee_06
มือวางอันดับ 1
มือวางอันดับ 1
 
โพสต์: 507
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย pakee_06 » อาทิตย์ 18 มี.ค. 2012 1:51 pm

ถ้าพี่ๆ คนไหนติดตั้ง server เป็น postgres เวอร์ชัน 9 สามารถใช้ฟังก์ชัน string_agg () แทนการใช้ 2 ฟังก์ชัน array_to_string ()และ array_agg () ได้เลยนะคะ ไม่ต้องเขียน 2 รอบ
ตัวอย่าง เช่น

SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,string_agg(visit_physical_exam_body || ' ' || visit_physical_exam_detail,', ') as physical_exam
FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id = t_visit.t_visit_id
GROUP BY t_visit_physical_exam.t_visit_id

มีความสุขกับการใช้ Function นะก๊าบบบบ ^^
pakee_06
มือวางอันดับ 1
มือวางอันดับ 1
 
โพสต์: 507
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย pakee_06 » อาทิตย์ 18 มี.ค. 2012 2:44 pm

Nan_Y2K เขียน:มีประโยชน์มากมาย

เช่น คนไข้ 1 คนมารับบริการหลายวัน คิวรี่ออกมาจะได้อยู่บรรทัดเดียวซะที


ไปลาดยาวเมื่อไหร่ อย่าลืมเลี้ยงข้าวโพดต้มตอบแทนด้วยนะคะ พี่แนน + พี่ต่ายด้วย เอิ๊กๆ ^^
pakee_06
มือวางอันดับ 1
มือวางอันดับ 1
 
โพสต์: 507
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย Nan_Y2K » จันทร์ 19 มี.ค. 2012 9:09 am

pakee_06 เขียน:ถ้าพี่ๆ คนไหนติดตั้ง server เป็น postgres เวอร์ชัน 9 สามารถใช้ฟังก์ชัน string_agg () แทนการใช้ 2 ฟังก์ชัน array_to_string ()และ array_agg () ได้เลยนะคะ ไม่ต้องเขียน 2 รอบ
ตัวอย่าง เช่น

SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,string_agg(visit_physical_exam_body || ' ' || visit_physical_exam_detail,', ') as physical_exam
FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id = t_visit.t_visit_id
GROUP BY t_visit_physical_exam.t_visit_id

มีความสุขกับการใช้ Function นะก๊าบบบบ ^^


มีรพ.ไหนใช้ postgres 9 บ้างอ่ะ
โรงพยาบาลลาดยาว จ.นครสวรรค์
http://www.ladyao.org
-----------------------------------
นฤพล แก้วชิงดวง
สาบานว่ารัก HospitalOS
-----------------------------------

Server Status :
Master Server Ubuntu10.04 64bit / PostgresPlus8.4 / HospitalOS3.9.19build07
Slave Backup with Slony

Module : Welfare / Dental / LabLis / NCD / Image
ภาพประจำตัวสมาชิก
Nan_Y2K
ระดับมืออาชีพ
ระดับมืออาชีพ
 
โพสต์: 616
ลงทะเบียนเมื่อ: จันทร์ 29 ธ.ค. 2003 12:00 am
ที่อยู่: โรงพยาบาลลาดยาว

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย pakee_06 » จันทร์ 19 มี.ค. 2012 9:19 am

Nan_Y2K เขียน:
pakee_06 เขียน:ถ้าพี่ๆ คนไหนติดตั้ง server เป็น postgres เวอร์ชัน 9 สามารถใช้ฟังก์ชัน string_agg () แทนการใช้ 2 ฟังก์ชัน array_to_string ()และ array_agg () ได้เลยนะคะ ไม่ต้องเขียน 2 รอบ
ตัวอย่าง เช่น

SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,string_agg(visit_physical_exam_body || ' ' || visit_physical_exam_detail,', ') as physical_exam
FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id = t_visit.t_visit_id
GROUP BY t_visit_physical_exam.t_visit_id

มีความสุขกับการใช้ Function นะก๊าบบบบ ^^


มีรพ.ไหนใช้ postgres 9 บ้างอ่ะ


ตอนนี้ยังไม่น่าจะมีโรงพยาบาลไหนลงนะคะ ยกเว้นทดลองที่เครื่องตัวเองค่ะ ^^
pakee_06
มือวางอันดับ 1
มือวางอันดับ 1
 
โพสต์: 507
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย Nan_Y2K » จันทร์ 07 พ.ค. 2012 1:06 am

มีใครเอา sql ที่น้องก้อยเขียนนี้ไปใช้แล้วบ้างครับ
โรงพยาบาลลาดยาว จ.นครสวรรค์
http://www.ladyao.org
-----------------------------------
นฤพล แก้วชิงดวง
สาบานว่ารัก HospitalOS
-----------------------------------

Server Status :
Master Server Ubuntu10.04 64bit / PostgresPlus8.4 / HospitalOS3.9.19build07
Slave Backup with Slony

Module : Welfare / Dental / LabLis / NCD / Image
ภาพประจำตัวสมาชิก
Nan_Y2K
ระดับมืออาชีพ
ระดับมืออาชีพ
 
โพสต์: 616
ลงทะเบียนเมื่อ: จันทร์ 29 ธ.ค. 2003 12:00 am
ที่อยู่: โรงพยาบาลลาดยาว

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย therd1181 » ศุกร์ 11 พ.ค. 2012 11:01 am

ขอบคุณครับ น่าสนใจมากเรยยยยย..
ธรรมชาติน่ายล ภูมิพลเขื่อนใหญ่ พระเจ้าตากเกรียงไกร เมืองไม้และป่างาม "สุดประจิมที่ริมเมย" เมืองหมอกงามล้ำ ถ้ำแสนวิจิจร ชีวิตชาวดอย
Mr.Therdsak Boonchu (Computer Engineering Tak)
Thasongyang Hospital..
Web: http://www.thasongyang.com
Web board: http://www.thasongyang.com/board/
Server
-acer...
-HP ...

Hospital-OS Version.
-Hos3.9.17bulid01
OS
-CentOS
Postgresql
-8.4.x
Backup
-Slony-I
ภาพประจำตัวสมาชิก
therd1181
มือใหม่
มือใหม่
 
โพสต์: 31
ลงทะเบียนเมื่อ: พฤหัสฯ. 11 มิ.ย. 2009 9:38 pm
ที่อยู่: Thasongyang-Hospital

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย chumsin » พุธ 27 มิ.ย. 2012 12:39 am

ขอบคุณน้องก้อย มากๆ ลองแล้วโอเคเลย ผมลองเขียน xml มาลองให้ใช้กันโดยใช้ sql ของน้องก้อย ผมเรียก admit_chart
ใช้ print แนบชาร์ตผู้ป่วยใน ได้คะแนน auditอีก 2 คะแนน :biggrin:
ดาวน์โหลด!!! http://db.tt/tuqqanfg
แตกไฟล์ออกแล้วเอาไปแปะใน ../hprinting/byuser
เงื่อนไขในการใช้ ต้องเป็นผู้ป่วยใน
แนะนำการโพสรูปด้วยpicasa http://www.hospital-os.com/th/phpbb/viewtopic.php?f=4&t=2776
แก้ไขลายเซ็น กด http://www.hospital-os.com/th/phpbb/ucp.php?i=profile&mode=signature

Mr. Chumsin Sriyan thapae Hospital Satun
Nhso zone 12

Server-IBM.Ram4G
OS -UBUNTU 11.04 64-bit
Hospital-OS Version. -Hos3.9.20bulid01
Postgresql-8.4.x
Backup HP ram2G -Slony-I
ภาพประจำตัวสมาชิก
chumsin
ระดับเทพแห่งเว็บบอร์ด HospitalOS
ระดับเทพแห่งเว็บบอร์ด HospitalOS
 
โพสต์: 1620
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย kapong_hosp2 » เสาร์ 28 ก.ค. 2012 6:13 pm

โอ้ว สุดยอดที่สุดเลย
ภาพประจำตัวสมาชิก
kapong_hosp2
มือใหม่
มือใหม่
 
โพสต์: 37
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
ที่อยู่: โรงพยาบาลกะปงชัยพัฒน์ จ.พังงา

Re: Happy Friday เอา Function ของ postgresql มาฝากค่ะ

โพสต์ใหม่โดย pakee_06 » พฤหัสฯ. 25 ต.ค. 2012 1:01 pm

chumsin เขียน:ขอบคุณน้องก้อย มากๆ ลองแล้วโอเคเลย ผมลองเขียน xml มาลองให้ใช้กันโดยใช้ sql ของน้องก้อย ผมเรียก admit_chart
ใช้ print แนบชาร์ตผู้ป่วยใน ได้คะแนน auditอีก 2 คะแนน :biggrin:
ดาวน์โหลด!!! http://db.tt/tuqqanfg
แตกไฟล์ออกแล้วเอาไปแปะใน ../hprinting/byuser
เงื่อนไขในการใช้ ต้องเป็นผู้ป่วยใน


ดัน ดัน
pakee_06
มือวางอันดับ 1
มือวางอันดับ 1
 
โพสต์: 507
ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am


ย้อนกลับไปยัง เรื่องการออกรายงาน

ผู้ใช้งานขณะนี้

่กำลังดูบอร์ดนี้: ไม่มีสมาชิก และ บุคคลทั่วไป 1 ท่าน

cron