BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: vinaisena ที่ กันยายน 07, 2010, 14:43:21 PM
-
คำสั่งแสดงจำนวนการตรวจโรคจำแนกแพทย์ OPD
มีโจทย์ ว่า
1. จำนวนการตรวจโรคจำแนกรายแพทย์ ตั้งแต่เวลา 09.00-16.00 ไม่รวม วันหยุด/วันหยุด นักขัตฤกษ์
อาจารย์ท่านใด แบ่งปัน SQL ได้บ้างครับ
-
ลองอันนี้ได้ไหมครับ
select o.doctor, d.name, count(o.vn)
from ovstdiag o, doctor d
where o.doctor=d.code
and vstdate between "2010-01-01" and "2010-01-05" and vsttime between "09:00:00" and "12:00:00"
and vstdate not in (select holiday_date from holiday) and d.position_id=1
group by doctor, name
-
จะลองครับท่านอาจารย์
เงื่อนไขทางนี้ ท่านแพทย์มีเงื่อนไขมากมายกว่านี้อีก ครับ ฟังโจทย์แล้วแทบอ๊วกๆๆ
-
ลองอันนี้ได้ไหมครับ
select o.doctor, d.name, count(o.vn)
from ovstdiag o, doctor d
where o.doctor=d.code
and vstdate between "2010-01-01" and "2010-01-05" and vsttime between "09:00:00" and "12:00:00"
and vstdate not in (select holiday_date from holiday) and d.position_id=1
group by doctor, name
ผมดุ sql หลายอัน รวมทั้งใน custom search ด้วยครับ เรื่องเวลาเนี่ยส่วนใหญ่จะอิง vsttime
ผมไม่ได้บอกว่าผิดหรือถูก แต่ผมตั้งข้อสังเกตให้พวกเราพึงระวังไว้นะครับว่า vsttime นั้นเป็นเวลาที่ลงทะเบียนส่งตรวจจากห้องบัตร หรือเวลาที่ออก VN นั่นเอง ไม่ใช่เวลาที่แพทย์ตรวจผู้ป่วยจริง
ต้องดูบริบทของแต่ละ ร.พ. ด้วยนะครับ
ดังนั้นการใช้ vsttime เป็นตัวจับการทำงานของแพทย์ว่าเวลานั้น-เวลานี้ แพทย์ตรวจได้กี่คน
ถ้าแพทย์ key สั่งยาเอง...ไม่มีปัญหาครับ detect ได้เลย ดูที่ service time ได้ครับ (service12)
ได้มาจากใน board นี้แหละครับ รู้สึกว่าจะของ อ.อ๊อด
อันที่ (Confirm) ผมพิสูจน์แล้วครับ
=========================================
service1 = เวลา
service2 = เวลา
service3 = เวลาพิมพ์ใบสั่งยา (บันทึกส่งตรวจ) (Confirm)
service4 = เวลาที่ดึงผู้ป่วยมาซักประวัติ
service5 = เวลาที่แพทย์ดึงผู้ป่วยมาตรวจ (เริ่มตรวจ) (Confirm)
service6 = เวลาที่บันทึกรายการยา จากห้องจ่ายยา Mode 2 (เริ่ม Key ยา) (Confirm)
service7 = เวลาที่บันทึกออกใบเสร็จรับเงิน
service8 = เวลาที่บันทึก Admit ผู้ป่วย (Confirm)
service9 = เวลา
service10 = เวลา
service11 = เวลาที่บันทึกซักประวัติเสร็จ
service12 = เวลาที่แพทย์บันทึกสั่งยา (ตรวจเสร็จ)
service12 = เวลาที่ห้องฉุกเฉินบันทึกการให้บริการ
service13 = เวลา
service14 = เวลา
service15 = เวลา
service16 = เวลาที่บันทึกจ่ายยาให้ผู้ป่วย (จากห้องจ่ายยา) (Confirm)
service17 = เวลา
service18 = เวลา
service19 = เวลาที่ห้องยา Key รายการยาเสร็จ (Confirm)
service20 = เวลาที่ห้องบัตรลงทะเบียนผู้ป่วย (ก่อนพิมพ์ใบสั่งยา)
=========================================
ส่วนอันนี้ผมใช้หาระยะเวลารอคอย
=========================================
if service6 is not null
waitingtime=service16-service6
else
waitingtime=service16-service12
service12,16,19 is null ไม่ได้มาตรวจ (ไม่ผ่านห้องตรวจ-ห้องยา)
service16 = Rx_operator.Rx_time where pay='Y' (แต่ไม่ update ถ้ามีการเรียกมาบันทึกใหม่)
service19 = Rx_operator.Rx_time where pay=''
ถ้าใช้หน้าจอซักประวัติ (พยาบาล) สั่งยา จะใช้ service11 เป็นเวลาสั่งยา
ห้องทันตกรรม
การหาเวลารอคอย
select v.vn, v.hn, v.oqueue, concat(p.pname,p.fname,' ',p.lname) as ptname, v.vsttime, t.service12, t.service19, r.rx_time, t.service16,
if(t.service19 is null,sec_to_time(time_to_sec(r.rx_time)-time_to_sec(t.service12)),sec_to_time(time_to_sec(r.rx_time)-time_to_sec(t.service19))) as wait_time
from rx_operator r
left outer join ovst v on v.vn=r.vn
left outer join patient p on p.hn=v.hn
left outer join service_time t on t.vn=r.vn
where r.vn like '530325%' and r.pay='Y' and r.pay_depcode="036"
order by r.rx_time
=========================================
ส่วนรายงานที่แนบนี้ก็...เพิ่งทำให้ OPD เสร็จเมื่อไม่นานมานี้ ขอทราบว่าแพทย์ที่ออกตรวจตอนเช้า (คลินิกรุ่งอรุณ) ตรวจได้คนละกี่ case
-
ขอบคุณครับ
-
ขอบคุณครับ
-
ที่หนักกว่านั้น มีการ remed แทนแพทย์ได้ด้วยในบางคลินิก แต่เป็นเวลาราชการ คงต้องจับแผนกและ user login ด้วยนะครับ...
-
ขอบใจอย่างแรงเลยนิ เป็นประโยชน์มากมาย ;D
-
ถ้าไม่ให้คิดรวมวันหยุด ใช้ตารางHoliday มันจะมีแต่วันหยุด เสาร์ อาทิตย์นะซิครับ ไม่มีวันหยุดนักขัตฤกษ์เลย ใช่หรือเปล่าไม่รู้
-
ขอบคุณครับ
ลองอันนี้ได้ไหมครับ
select o.doctor, d.name, count(o.vn)
from ovstdiag o, doctor d
where o.doctor=d.code
and vstdate between "2010-01-01" and "2010-01-05" and vsttime between "09:00:00" and "12:00:00"
and vstdate not in (select holiday_date from holiday) and d.position_id=1
group by doctor, name
ผมดุ sql หลายอัน รวมทั้งใน custom search ด้วยครับ เรื่องเวลาเนี่ยส่วนใหญ่จะอิง vsttime
ผมไม่ได้บอกว่าผิดหรือถูก แต่ผมตั้งข้อสังเกตให้พวกเราพึงระวังไว้นะครับว่า vsttime นั้นเป็นเวลาที่ลงทะเบียนส่งตรวจจากห้องบัตร หรือเวลาที่ออก VN นั่นเอง ไม่ใช่เวลาที่แพทย์ตรวจผู้ป่วยจริง
ต้องดูบริบทของแต่ละ ร.พ. ด้วยนะครับ
ดังนั้นการใช้ vsttime เป็นตัวจับการทำงานของแพทย์ว่าเวลานั้น-เวลานี้ แพทย์ตรวจได้กี่คน
ถ้าแพทย์ key สั่งยาเอง...ไม่มีปัญหาครับ detect ได้เลย ดูที่ service time ได้ครับ (service12)
ได้มาจากใน board นี้แหละครับ รู้สึกว่าจะของ อ.อ๊อด
อันที่ (Confirm) ผมพิสูจน์แล้วครับ
=========================================
service1 = เวลา
service2 = เวลา
service3 = เวลาพิมพ์ใบสั่งยา (บันทึกส่งตรวจ) (Confirm)
service4 = เวลาที่ดึงผู้ป่วยมาซักประวัติ
service5 = เวลาที่แพทย์ดึงผู้ป่วยมาตรวจ (เริ่มตรวจ) (Confirm)
service6 = เวลาที่บันทึกรายการยา จากห้องจ่ายยา Mode 2 (เริ่ม Key ยา) (Confirm)
service7 = เวลาที่บันทึกออกใบเสร็จรับเงิน
service8 = เวลาที่บันทึก Admit ผู้ป่วย (Confirm)
service9 = เวลา
service10 = เวลา
service11 = เวลาที่บันทึกซักประวัติเสร็จ
service12 = เวลาที่แพทย์บันทึกสั่งยา (ตรวจเสร็จ)
service12 = เวลาที่ห้องฉุกเฉินบันทึกการให้บริการ
service13 = เวลา
service14 = เวลา
service15 = เวลา
service16 = เวลาที่บันทึกจ่ายยาให้ผู้ป่วย (จากห้องจ่ายยา) (Confirm)
service17 = เวลา
service18 = เวลา
service19 = เวลาที่ห้องยา Key รายการยาเสร็จ (Confirm)
service20 = เวลาที่ห้องบัตรลงทะเบียนผู้ป่วย (ก่อนพิมพ์ใบสั่งยา)
=========================================
ส่วนอันนี้ผมใช้หาระยะเวลารอคอย
=========================================
if service6 is not null
waitingtime=service16-service6
else
waitingtime=service16-service12
service12,16,19 is null ไม่ได้มาตรวจ (ไม่ผ่านห้องตรวจ-ห้องยา)
service16 = Rx_operator.Rx_time where pay='Y' (แต่ไม่ update ถ้ามีการเรียกมาบันทึกใหม่)
service19 = Rx_operator.Rx_time where pay=''
ถ้าใช้หน้าจอซักประวัติ (พยาบาล) สั่งยา จะใช้ service11 เป็นเวลาสั่งยา
ห้องทันตกรรม
การหาเวลารอคอย
select v.vn, v.hn, v.oqueue, concat(p.pname,p.fname,' ',p.lname) as ptname, v.vsttime, t.service12, t.service19, r.rx_time, t.service16,
if(t.service19 is null,sec_to_time(time_to_sec(r.rx_time)-time_to_sec(t.service12)),sec_to_time(time_to_sec(r.rx_time)-time_to_sec(t.service19))) as wait_time
from rx_operator r
left outer join ovst v on v.vn=r.vn
left outer join patient p on p.hn=v.hn
left outer join service_time t on t.vn=r.vn
where r.vn like '530325%' and r.pay='Y' and r.pay_depcode="036"
order by r.rx_time
=========================================
ส่วนรายงานที่แนบนี้ก็...เพิ่งทำให้ OPD เสร็จเมื่อไม่นานมานี้ ขอทราบว่าแพทย์ที่ออกตรวจตอนเช้า (คลินิกรุ่งอรุณ) ตรวจได้คนละกี่ case
-
มีอ. ท่านใหนพอจะมีรายงาน WorkLoad ของพยาบาลที่ซักประวัติที่OPD บางครับ
-
ให้ไปเป็นตัวอย่าง ไปประยุกต์ใช้กันนะครับ ใครจะเอาไปปรับแต่งอย่างไร...ก็ตามความสามารถ ตามบริบทของหน่วยงานครับ
;D ;D ;D ;D ;D
ถ้าไม่ให้คิดรวมวันหยุด ใช้ตารางHoliday มันจะมีแต่วันหยุด เสาร์ อาทิตย์นะซิครับ ไม่มีวันหยุดนักขัตฤกษ์เลย ใช่หรือเปล่าไม่รู้
เพิ่มได้ครับ ในตาราง holiday สามารถใส่วันที่เป็นวันหยุดได้ทุกประเภทครับ เสาร์-อาทิตย์ ขัตฤกษ์ หยุดชดเชย ฯลฯ
-
ชื่นชมรายงานนะ OK work ครับ ท่าน
เรียน ถาม อ.โก้ เพิ่มเติมว่า
รายงานที่ทำมา ไม่ได้ script วันหยุด เสาร์ - อาทิตย์ ใช่ไหมครับ
จะได้อธิบายให้ รอง ผอ.ทราบอีกที
-
ชื่นชมรายงานนะ OK work ครับ ท่าน
เรียน ถาม อ.โก้ เพิ่มเติมว่า
รายงานที่ทำมา ไม่ได้ script วันหยุด เสาร์ - อาทิตย์ ใช่ไหมครับ
จะได้อธิบายให้ รอง ผอ.ทราบอีกที
ถ้าหมายถึงตัวรายงานที่ผมแนบไป...จริง ๆ ผมตั้งใจจะทำเป็นแบบวันเดียวครับ คือหัวหน้า OPD จะกดดูเองแต่ละวัน
แต่บังเอิญช่องวันที่มีให้กำหนดเป็นช่วง (function ที่ อ.mn ใส่ไว้ใน report designer) ก็เลยสามารถนำไปใช้ได้กว้างขึ้น คือดูได้ตามช่วงเวลาที่กำหนด ดังนั้นจึงไม่มีการกำหนดว่าเป็นวันหยุดหรือวันไม่หยุด
(ไม่ SKIP วันหยุดทุกประเภทครับครับ) เพราะอย่างที่บอก ตอนทำมีวัตถุประสงค์เฉพาะครับ
และข้อจำกัดคือ แพทย์ต้อง key สั่งยาเองนะครับ ข้อมูลจึงจะถูกต้อง ปัญหาคือถ้าแพทย์ไม่ key เอง (เขียนใบสั่งยา...แล้วห้องยามา key) เราจะไม่ทราบเวลาที่แพทย์ตรวจเสร็จที่แท้จริง ข้อมูลอาจผิดพลาดได้ เพราะบางรายตรวจเสร็จไปตอน 8:25 น. กว่าห้องยาจะ key จะอาจเลยไปที่ 8:35 น. ถ้าเราตัดเวลาที่ 8:30 น. case แบบนี้จะหายไปครับ
หากไม่ mind อะไรมาก อาจใช้ rxdate rxtime ใน opitemrece ก็ได้
ผมอยากให้พวกเราเอาไปเป็นศึกษาเป็นตัวอย่างครับ และฝึกสร้างเป็นผลงานของท่านเอง (รวมทั้งแบ่งปัน) จะได้เกิดความภาคภูมิใจครับ (แต่อาจจะใช้เวลานานหน่อย...หากเร่งด่วนจริง ๆ ใช้วิธี ก. ไม่ได้ คงต้องใช้ ข. ครับ ;D ;D ;D ;D ;D )
-
ผมพบปัญหาอยู่อย่างหนึ่งคือถ้าพยาบาลตรวจ แล้วลงข้อมูลในช่อง รคสพ. รายงานก็นำมาแสดงด้วยซึ่งอันที่จริงแล้วแพทย์ไม่ได้ตรวจเอง ไม่ทราบว่าส่วนนี้จะใช้คำสั่งตัดออกได้อย่างไร
-
ต้องดู sql ที่ใช้ด้วยครับ
ลองดูที่ field doctor กับ command_doctor ใน ovst ครับ