รอบนี้เลยขอแก้ตัวใหม่ค่ะ ดูตามโรคกันไป แต่ในที่นี้ขอยกโรคเรื้อรัง ละกันนะคะ เพราะฐานข้อมูล Hospital OS จัดเก็บ โรคเรื้อรังไว้ค่ะ เราสามารถทราบได้ว่า ICD10 ไหนเป็นโรคเรื่อรังอะไรจากข้อมูลตรงนี้ค่ะ
เอาคำสั่งนี้ไปรัน นะคะ (รันครั้งเดียวก็พอ)
CREATE OR REPLACE FUNCTION check_new_disease(varchar, varchar, varchar, varchar,varchar) RETURNS bool AS
'
declare
patient_id varchar;
visit_id varchar;
visit_icd10 varchar;
visit_datetime varchar;
disease varchar;
newvisit boolean;
check_visit record;
begin
patient_id = $1;visit_id = $2;
visit_icd10 = $3;
visit_datetime = $4;
disease = $5;
newvisit = true;
if (patient_id <> '''' and visit_id <> '''' and visit_icd10 <> '''' and disease <> '''' and visit_datetime <> '''')
then
for check_visit in (select t_visit.t_visit_id as t_visit_id
from t_visit 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_group_icd10
on upper(substring(b_group_icd10.group_icd10_number,1,3)) = upper(substring(t_diag_icd10.diag_icd10_number,1,3))
inner join b_group_chronic
on b_group_icd10.b_group_chronic_id = b_group_chronic.b_group_chronic_id
where t_visit.t_visit_id <> visit_id
and t_visit.t_patient_id = patient_id
and b_group_chronic.b_group_chronic_id = disease
and t_visit.f_visit_status_id <> ''4''
and substring(t_visit.visit_financial_discharge_time,1,10) < substring(visit_datetime,1,10))
loop
if check_visit.t_visit_id is not null
then newvisit = false;
else
--กรณี Join กันไม่สำเร็จ
end if;
end loop;
else newvisit = true;
end if;
return newvisit;
end;
'
LANGUAGE 'plpgsql';ตัวอย่างการนำไปใช้ ดังนี้ค่ะ
SELECT t_visit.t_visit_id
,t_visit.t_patient_id
,t_diag_icd10.diag_icd10_number
,b_group_chronic.b_group_chronic_id
,b_group_chronic.group_chronic_number
,b_group_chronic.group_chronic_description_th
--เรียกใช้ตรงนี้
,check_new_disease(t_visit.t_patient_id,t_visit.t_visit_id,t_diag_icd10.diag_icd10_number,t_visit.visit_financial_discharge_time,b_group_chronic.b_group_chronic_id)
FROM t_visit 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_group_icd10
on upper(substring(b_group_icd10.group_icd10_number,1,3)) = upper(substring(t_diag_icd10.diag_icd10_number,1,3))
inner join b_group_chronic
on b_group_icd10.b_group_chronic_id = b_group_chronic.b_group_chronic_id
where t_visit.f_visit_status_id <> '4'
and substring(t_visit.visit_financial_discharge_time,1,10) = '2553-04-01';
ยังไงก็ลองนำไปใช้ดูนะคะ ... ไม่แน่ใจว่าจะตรงตามที่ต้องการหรือเปล่า ก็สามารถนำไปปรับปรุงได้เลยค่ะ
วินิจฉัยครั้งแรกในชาตินี้ หรือนี่
ตอบลบสุดยอดๆ เอาอีก อิอิ
แล้วถ้าต้องหา visit ครั้งล่าสุดที่มารับบริการล่ะครับอาจารย์
ตอบลบเช่น มาตรวจแลปรายการ HbA1C เอาครั้งล่าสุด
ขอบคุณครับ
หากต้องการตัวล่าสุดเราก็ต้องยึดตามวันที่ตรวจเป็นหลักนะคะ ซึ่งในตัวอย่างที่ยกมาต้องการดู "มาตรวจแลปรายการ HbA1C เอาครั้งล่าสุด" แสดงว่า SQL ที่จะอยู่ใน Function ของเราก็จะต้องเป็นข้อมูลจาก t_order, t_result_lab ซึ่งต้องส่ง t_patient_id และ b_item_id มาตรวจสอบ และดึงข้อมูลล่าสุดไปแสดง ส่วนคำสั่ง SQL นั้น เดี๋ยวจะลองเขียนดูนะคะ แล้วจะนำมาเผยแพร่อีกทีค่ะ ... จริงๆ หากเราเขียนโปรแกรมได้ก็จะง่ายกว่านี้นะคะ
ตอบลบ