ลองอันนี้ได้ไหมครับ
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