MySQL Tip ! หาวิธีตรวจสอบ ว่าสั่งยาเดิม หรือยาใหม่ วิธีใช้เดิม หรือใหม่ และจำนวนเดิมหรือมากกว่า น้อยกว่า
วันนี้พามาหา โค้ด sql เพื่อหาวิธีใช้ยา ว่ายาเดิม และ วิธีใช้เดิมหรือใหม่ และเพิ่มจำนวน หรือน้อยกว่า หรือมากกว่า กันครับ มีเพื่อนถามมา เลยคิดว่าน่าจะหาได้ ตัวอย่างคือ
เลย คิดได้ว่าเคยทำไว้ ในโปรแกรม RX_From อยู่แต่ตัวนั้นใช้วิธีดึง query sql มาแล้วให้ภาษา pascal วนลูปหาอีกที เลยคิดว่าเพื่อนๆ คงเอาไปใช้งานยาก เลยกะจะมาเอามาเขียนแบบ sql เพียวๆ ดูว่าจะได้ไหม
เลยเอาโค้ด sql เก่ามาโมดิฟาย ให้รันแบบ sql เพียวๆ ก็เลยได้โค้ดตามนี้เลย
โดยใช้โค้ดเดิม คือ
select if(substr(o.icode,1,1)=1,”Y”,”N”)as confirm
,o.icode,o.income,concat(s.name,” “,s.strength,” “,s.units) as name,
o.qty, o.unitprice ,sum(sum_price) as totprice ,
d.drugusage,
if(u.sp_use <>””,concat(“>”,u.name1,u.name3),concat(d.code,d.name1))as code,
d.name1,d.name2,d.name3,d.shortlist,dt.name as doctor_name
, k.department as dep_name ,u.name1,u.name2,u.name3,i.name as income_name
,if(u.sp_use<>”” or d.name1 =””,concat(“>”,u.name1,u.name3),shortlist)as shortlist_new
,if(u.sp_use<>”” or d.name3 =”” or d.name3 is null,concat(“>”,u.name3),d.name3)as name3_new
from opitemrece o
left outer join s_drugitems s on s.icode=o.icode
left outer join drugusage d on d.drugusage=o.drugusage
left outer join doctor dt on dt.code=o.doctor
left outer join kskdepartment k on k.depcode=o.dep_code
left outer join sp_use u on u.sp_use = o.sp_use
left outer join income i on i.income = o.income
where o.vn=”600411192340″
group by s.name,s.strength,s.units,o.qty,o.unitprice,d.drugusage,d.code,d.name1,d.name2,d.name3,d.shortlist,dt.name,k.department,u.name1,u.name2,u.name3
order by o.income,s.name
ซึ่งยังไม่สามารถเช็คได้ว่าเป็นยาเก่าหรือยาใหม่ แต่เช็คไม่ได้ว่าเป็นวิธีใช้เดิม หรือวิธีใช้ใหม่ และก็ยังเช็คไม่ได้ว่าเป็นจำนวนเดิม หรือ มากกว่าเดิม หรือน้อยกว่าเดิม
เลยมาหาวิธีวนลูปหรือใช้ if เช็คทีละ step โดยต้องเช็ค visit ที่มารับบริการย้อนหลัง มาก่อน สัก 6 เดือนที่ผ่านมา มีไหม ถ้ามาก็เอามาเช็ค จะได้โค้ดตามนี้
select icode,drugusage,sp_use,qty ,DATE_ADD( curdate(), INTERVAL -6 month )
from opitemrece where hn = “00000001” and income in(’03’,’19’)
and vstdate > DATE_ADD( curdate(), INTERVAL -6 month )
and vn < “600411192340”
order by vn desc
อันนี้สำหรับดึง ข้อมูล 6 เดือนย้อนหลังมาก่อน เพื่อจะเอาไว้เช็ค visit ปัจจุบัน
และจะเช็คเฉพาะรายการที่เป็น icode ยาเท่านั้น โดยดึง sql คือ
select income_drug from opdconfig limit 1
และ
select income from income where income_group = “12”
จะได้เฉพาะรายงานยา และรายการยากลับบ้าน
ทีนี้ก็เอาโค้ดเหล่านี้มา หาทีละ step โดยเช็ค icode ก่อน และตามด้วย drugusage และตามด้วย qty คือจำนวน ว่าเท่าเดิม หรือ มากกว่า หรือ น้อยกว่า
จึงได้โค้ด sql เพียว ๆ ตามนี้ครับ โดยผมใช้ if มาเช็ค 6 ตลบ เลยทีเดียว (เอาที่ผลลัพธ์ พอครับไม่ต้องหรูหรอก ถ้าผลลัพธ์ได้ก็ใช้ได้ละครับ)
select o.hn
,o.icode,o.income,concat(s.name,” “,s.strength,” “,s.units) as name,
o.qty, sum(sum_price) as totprice ,
d.drugusage,
if(u.sp_use <>””,concat(“>”,u.name1,u.name3),concat(d.code,d.name1))as code,
d.name1,d.name2,d.name3,d.shortlist,dt.name as doctor_name
, k.department as dep_name ,u.name1,u.name2,u.name3,i.name as income_name
,
if(o.income in(’03’,’19’),
if((select count(*) as cc from opitemrece where hn = o.hn and income in(’03’,’19’)
and vstdate > DATE_ADD( curdate(), INTERVAL -6 month )
and vn < o.vn and icode=o.icode
) > 0,
if((select count(*) as cc from opitemrece where hn = o.hn and income in(’03’,’19’)
and vstdate > DATE_ADD( curdate(), INTERVAL -6 month )
and vn < o.vn and icode=o.icode and drugusage=o.drugusage
) > 0,
if((select count(*) as cc from opitemrece where hn = o.hn and income in(’03’,’19’)
and vstdate > DATE_ADD( curdate(), INTERVAL -6 month )
and vn < o.vn and icode=o.icode and qty=o.qty
) > 0,concat(i.name,’ < ยาเดิม วิธีใช้เดิม จำนวนเดิม >’),
if((select count(*) as cc from opitemrece where hn = o.hn and income in(’03’,’19’)
and vstdate > DATE_ADD( curdate(), INTERVAL -6 month )
and vn < o.vn and icode=o.icode and qty<o.qty
) > 0,concat(i.name,’ < ยาเดิม วิธีใช้เดิม เพิ่มจำนวน >’),concat(i.name,’ < ยาเดิม เปลี่ยนวิธีใช้ ลดจำนวน >’))
) ,
if((select count(*) as cc from opitemrece where hn = o.hn and income in(’03’,’19’)
and vstdate > DATE_ADD( curdate(), INTERVAL -6 month )
and vn < o.vn and icode=o.icode and qty=o.qty
) > 0,concat(i.name,’ < ยาเดิม เปลี่ยนวิธีใช้ จำนวนเดิม >’),
if((select count(*) as cc from opitemrece where hn = o.hn and income in(’03’,’19’)
and vstdate > DATE_ADD( curdate(), INTERVAL -6 month )
and vn < o.vn and icode=o.icode and qty<o.qty
) > 0,concat(i.name,’ < ยาเดิม เปลี่ยนวิธีใช้ เพิ่มจำนวน >’),concat(i.name,’ < ยาเดิม เปลี่ยนวิธีใช้ ลดจำนวน >’))
)
)
,concat(i.name,’ < ยาสั่งใช้ตัวใหม่ >’)),i.name)as check_icode
from opitemrece o
left outer join s_drugitems s on s.icode=o.icode
left outer join drugusage d on d.drugusage=o.drugusage
left outer join doctor dt on dt.code=o.doctor
left outer join kskdepartment k on k.depcode=o.dep_code
left outer join sp_use u on u.sp_use = o.sp_use
left outer join income i on i.income = o.income
where o.vn=”610511185517″
group by s.name,s.strength,s.units,o.qty,o.unitprice,d.drugusage,d.code,
d.name1,d.name2,d.name3,d.shortlist,dt.name,k.department,u.name1,u.name2,u.name3
order by o.income,s.name
ดาวโหลดโค้ด sql ตามนี้ครับ
https://www.dropbox.com/s/4h5ig1ndqv5drz7/sql_drug_new_old.txt?dl=0
และผลที่ได้ตามรูปนี้เลยครับ
เสร็จเรียบร้อย
หวังว่า เพื่อนๆ จะเอาไปต่อยอดได้ เองนะครับ น่าจะมีประโยชน์ไม่มากก็น้อย
หวังว่าจะช่วยได้นะครับ
ฝากแชร์และฝาก ติดตามด้วยนะครับ ขอบคุณครับ
I’m ARM
https://www.youtube.com/channel/UCg2j2HMzE-vr4ATR7BGE0FQ?view_as=subscriber
แล้วพบกันใหม่ ในบทความต่อไป……..