ผู้เขียน หัวข้อ: รบกวนอาจารย์ทุกท่านแนะนำ SQL ดึงผู้ป่วยเบาหวานและเป็นความดันร่วมด้วยทีครับ  (อ่าน 6937 ครั้ง)

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

ออฟไลน์ ToPPer_(thaicharoen_Hosp)

  • Full Member
  • ***
  • กระทู้: 112
  • Respect: 0
    • ดูรายละเอียด
รบกวนอาจารย์ทุกท่านแนะนำ SQL ดึงผู้ป่วยเบาหวานและเป็นความดันร่วมด้วยทีครับ
ผมดึงข้อมูลจาก ICD10 เพราะคลินิคผมมีข้อมูลไม่ครบถ้วน
ผมใช้คำสั่งแบบนี้ไม่ทราบถูกใหมครับรบกวนแนะนำทีครับ  ผมไม่เก่งทำรายงานเลย ;D ;D
แต่ผู้บริหารอยากได้ รบกวนแนะนำทีครับ ขอบคุณทุกท่านครับ

อันนี้ผมดึง  HT  ถ้า DM ก็เปลี่ยน ICD10
select distinct(hn),icd10

from ovstdiag

where vstdate between "2009-08-01"and now() and icd10 between "I10"and"I15"


***อันนี้ผมดึงผู้ป่วยที่เป็น HT และ DM ด้วย ที่เป็น DM และ HT ร่วมด้วยแต่พอดึงแล้วข้อมูลเพี้ยน ;D ;D
select distinct(o1.hn),o1.icd10 as HT , o2.icd10 as DM

from ovstdiag  o1
left outer join ovstdiag o2 on o2.hn=o1.hn

where o1.vstdate between "2009-08-01"and now()
and o1.icd10 between "I10"and"I159"
and o2.icd10 between "E10" and "E149"

หรือท่านใดมีรายงานแบบนี้รบกวนขอด้วยนะครับ ขอบคุณเอาจารย์ทุกท่านที่แนะนำครับ

โรงพยาบาลไทยเจริญ
รพช.30เตียง(เค้าพัฒนาแล้วน้าตะเอง)
นายธนกร  เมืองหงษ์ นวก.คอมพิวเตอร์
HOSxP   ใหม่เสมอ
Server--NOW-UPGRADING
==============================
ขอทุกท่านโปรดแนะนำด้วยนะครับ
น้องใหม่ขอฝากเนื้อฝากตัวด้วยนะครับ

ออฟไลน์ mashimaro

  • Sr. Member
  • ****
  • กระทู้: 372
  • ทำทุกอย่างให้เต็มที่ ที่สุดแม้มันจะยากสักเท่าไหร่ เราจะผ่านมันไปได้
  • Respect: +8
    • ดูรายละเอียด
ช่วย ๆ กันครับ ผมก็นำลังไล่ดึงอยู่ครับ นำไปประยุกต์ดูครับ

select v.hn,v.vn,v.vstdate,concat(p.pname,' ',p.fname,' ',p.lname) as fullname,lo.lab_items_name_ref,lo.lab_order_result,v.pdx,
if (lo.lab_items_name_ref='Glucose',lo.lab_order_result,' ') as Gllab,
if (lo.lab_items_name_ref='Bun',lo.lab_order_result,' ') as Bunlab,
if (lo.lab_items_name_ref='Chol Total',lo.lab_order_result,' ') as Cholab,
if (lo.lab_items_name_ref='Chol HDL',lo.lab_order_result,' ') as Chol_HDL,
if (lo.lab_items_name_ref='Triglyceride',lo.lab_order_result,' ') as Triglyceride_HDL,
if (lo.lab_items_name_ref='Uric acid',lo.lab_order_result,' ') as Uric_acid,
if (lo.lab_items_name_ref='Hb A1c',lo.lab_order_result,' ') as Hb_A1c,
if (lo.lab_items_name_ref='Microalbumin',lo.lab_order_result,' ') as Microalbumin,
if (lo.lab_items_name_ref='Electrolyte',lo.lab_order_result,' ') as Electrolyte,
if (lo.lab_items_name_ref='Na',lo.lab_order_result,' ') as Na,
if (lo.lab_items_name_ref='K',lo.lab_order_result,' ') as K,
if (lo.lab_items_name_ref='CI',lo.lab_order_result,' ') as CI,
if (lo.lab_items_name_ref='tCO2',lo.lab_order_result,' ') as tCO2,
if (lo.lab_items_name_ref='Protein Strip',lo.lab_order_result,' ') as Protein_Strip,
if (lo.lab_items_name_ref='Mialbumin strip',lo.lab_order_result,' ') as Mialbumin_Strip,
os.cc
,bp.bps,bp.bpd,os.height,bmi
from vn_stat v
left outer join opdscreen os on os.vn=v.vn
left outer join opdscreen_bp bp on bp.vn=v.vn
left outer join patient p on v.hn=p.hn
left outer join lab_head lh on lh.vn=v.vn
left outer join lab_order lo on lo.lab_order_number=lh.lab_order_number
left outer join lab_items li on li.lab_items_code=lo.lab_items_code
where ((v.pdx like 'E10%') or (v.pdx like 'E11%') or (v.pdx like 'E12%') or (v.pdx like 'E13%')
or (v.pdx like 'E14%')) and (v.vstdate between '2011-04-01' and '2011-04-30')
and (lo.lab_items_name_ref in ('Glucose','Bun','Chol Total','Chol HDL','Triglyceride','Uric acid','Hb A1c''Microalbumin','Electrolyte','Na',
'K','CI','tCO2','Protein Strip','Mialbumin strip')) and lo.confirm='Y' and lo.lab_order_result<>'Negative'
group by v.vn
order by v.vn,v.vstdate,lo.lab_items_name_ref
Mashimaro
นักวิชาการคอมพิวเตอร์ โรงพยาบาลแม่สอด ตาก (รพท.420 เตียง)
เริ่มใช้ HOSxP มกราคม 2554 ปัจจุบันใช้ HOSxP V.3.54.1.3 วันที่ 8 ก.พ. 54
Main Server  :  Server OS Linux CentOS 5.5  MySQL
Slave Server  :  Server OS Linux CentOS 5.5  MySQL 5.1.23  HP Proliant ML150G3 Server
           Intel Xeon 5130 Dual Core Processor 2 GHz HDD 147 GB RAM 4 GB
ขึ้นระบบ  โดย บ.BMS  มกราคม 54   เข้าทำงานใน รพ. สิงหาคม 53
ขอขอบคุณ ทีมงานขึ้นระบบของคุณวินัย
งานหนักไม่เคยฆ่าคน
e-mail:  amnat_kalwtunkum@hotmail.com

ออฟไลน์ เกื้อกูล ครับ..

  • Hero Member
  • *****
  • กระทู้: 12,611
  • Respect: +169
    • ดูรายละเอียด
    • โรงพยาบาลปากท่อ
ได้หลายแนวคิด...นับโรคหลัก หรือ นับโรคร่วมด้วย  นับผู้รับบริการ

หรือ นับสมาชิกคลินิคโรคเรื้อรัง...
นับรายเก่าของหน่วยบริการ หรือรายใหม่ของหน่วยบริการ
นับจากเก่าในปี หรือใหม่ในปี
นับจากการเป็น 2 โรคร่วมกันแสดงว่า hn นั้นต้องเป็นทั้ง E10-E149 และต้องอยู่ในกลุ่ม I1O ด้วย...
Implement  HOSxP  Start 2548 ---> NOW!
Station : 130 Client   V.3 Version  3.67.1.XX
Server  : CENTOS  +MySQL maria 10.x.x

ออฟไลน์ mashimaro

  • Sr. Member
  • ****
  • กระทู้: 372
  • ทำทุกอย่างให้เต็มที่ ที่สุดแม้มันจะยากสักเท่าไหร่ เราจะผ่านมันไปได้
  • Respect: +8
    • ดูรายละเอียด
อันนี้ผมดึง  HT  ถ้า DM ก็เปลี่ยน ICD10
select distinct(hn),icd10

from ovstdiag

where vstdate between "2009-08-01"and now() and icd10 between "I10"and"I15"

select distinct(o1.hn),o1.icd10 as HT , o2.icd10 as DM

from ovstdiag  o1
left outer join ovstdiag o2 on o2.hn=o1.hn

where o1.vstdate between "2009-08-01"and now()
and o1.icd10 between "I10"and"I159"
and o2.icd10 between "E10" and "E149"



1. อย่าดึงโดยการใช้คำสั่ง Distinct เพราะจะทำให้ได้ แค่หนึ่ง แต่มีการเปิด visit หลายครั้งครับใช้คำสั่ง Group by จะถูกต้องกว่าน่ะครับ

2. ผมไม่แน่ใจว่าถ้าใช้คำสั่ง Between กับข้อมูลที่เป็น String จะ ถูกต้องหรือเปล่าผมไม่แน่ใจนะครับ แต่ผมขอแน่ะนำว่าให้ใช้ คำสั่ง Like แทนครับ

ลองทำดูครับ ยังไงได้ผลอะไรก็มาบอกด้วยครับ เพราะผมก็กำลังทำข้อมูลเกี่ยวกับตัวนี้อยู่ครับ
Mashimaro
นักวิชาการคอมพิวเตอร์ โรงพยาบาลแม่สอด ตาก (รพท.420 เตียง)
เริ่มใช้ HOSxP มกราคม 2554 ปัจจุบันใช้ HOSxP V.3.54.1.3 วันที่ 8 ก.พ. 54
Main Server  :  Server OS Linux CentOS 5.5  MySQL
Slave Server  :  Server OS Linux CentOS 5.5  MySQL 5.1.23  HP Proliant ML150G3 Server
           Intel Xeon 5130 Dual Core Processor 2 GHz HDD 147 GB RAM 4 GB
ขึ้นระบบ  โดย บ.BMS  มกราคม 54   เข้าทำงานใน รพ. สิงหาคม 53
ขอขอบคุณ ทีมงานขึ้นระบบของคุณวินัย
งานหนักไม่เคยฆ่าคน
e-mail:  amnat_kalwtunkum@hotmail.com

ออฟไลน์ pongnk213

  • Full Member
  • ***
  • กระทู้: 146
  • Respect: +1
    • ดูรายละเอียด
ลองศึกษาจากคำสั่งนี้ดูนะครับ เป็นคำสั่งให้นับผู้ป่วยที่เป็นทั้งความดันและเบาหวาน
ผมได้คำสั่งนี้จากบอร์ดครับ
Value := GetSQLIntegerData('select count(pc1.person_id) as cc '+
  ' from person_chronic pc1,person p '+
  ' where pc1.clinic = "001" '+
  ' and pc1.person_id = p.person_id '+
  ' and p.village_id = "'+DBPipeline['village_id']+'" '+
  ' and p.house_regist_type_id in ("1","3")' +
  ' and p.death = "N" '+
  ' and pc1.person_id in ('+GetSQLSubQueryData('select pc2.person_id '+
  ' from person_chronic pc2 where pc2.clinic = "002" ')+') ');
Mr.ATIPONG  SOOKPEN
HOSxP_PCU สอ.บ้านนาจาน
สสอ.นครไทย  จ.พิษณุโลก
เริ่มใช้ วันที่ 1 ก.ค.2552
mail : Atipong205@gmail.com
MSN : Atipong205@hotmail.com
Server : HP ML110 G5 Ram 2 Gb.
ทดสอบ Centos 4.7 ServerCD, MySQL Percona XtraDB 5.1.45
ขึ้นระบบโดย Mr.Komkrit Noenpoempisute Admin สสอ.นครไทย

ออฟไลน์ เกื้อกูล ครับ..

  • Hero Member
  • *****
  • กระทู้: 12,611
  • Respect: +169
    • ดูรายละเอียด
    • โรงพยาบาลปากท่อ
ลองศึกษาจากคำสั่งนี้ดูนะครับ เป็นคำสั่งให้นับผู้ป่วยที่เป็นทั้งความดันและเบาหวาน
ผมได้คำสั่งนี้จากบอร์ดครับ
Value := GetSQLIntegerData('select count(pc1.person_id) as cc '+
  ' from person_chronic pc1,person p '+
  ' where pc1.clinic = "001" '+
  ' and pc1.person_id = p.person_id '+
  ' and p.village_id = "'+DBPipeline['village_id']+'" '+
  ' and p.house_regist_type_id in ("1","3")' +
  ' and p.death = "N" '+
  ' and pc1.person_id in ('+GetSQLSubQueryData('select pc2.person_id '+
  ' from person_chronic pc2 where pc2.clinic = "002" ')+') ');

อันนี้เป็น ในหมู่บ้านรับผิดชอบ..และต้องเป็นสมาชิกคลินิกโรคความดันและเบาหวาน...แต่ไม่ใช่ยอดผู้รับบริการประจำวัน..ของหน่วยบริการ มากกว่า...
Implement  HOSxP  Start 2548 ---> NOW!
Station : 130 Client   V.3 Version  3.67.1.XX
Server  : CENTOS  +MySQL maria 10.x.x

ออฟไลน์ waradmin01

  • Newbie
  • *
  • กระทู้: 45
  • Respect: +1
    • ดูรายละเอียด
;D ;Dอันดับแรกต้องขอบคุณสำหรับโจษ ยากๆนี้ก่อนนะครับ ;D ;D
หลังจากได้โจษแล้วคิดสูตรออกมาได้แบบนี้ ไม่รู้ว่าถูกใจหรือถูกต้องตามคำถามหรือเปล่านะครับ ถ้าอาจาร์ยท่านใดดูแล้วไม่ถูกช่วยแนะนำด้วยครับ จะได้เอาไว้พัฒนาฝีมือต่อไป

select ov.hn,sum(if(icd10 Like "E10%" or icd10 Like "E11%" or icd10 Like "E12%" or icd10 Like "E13%" or icd10 Like "E14%",1,0)) as DM,
sum(if(icd10 Like "I10%" or icd10 Like "I11%" or icd10 Like "I12%" or icd10 Like "I13%" or icd10 Like "I14%" or icd10 Like "I15%",1,0)) as HT,
concat(pt.pname,pt.fname," ",pt.lname) as pt_name
from ovstdiag ov
left join patient pt on pt.hn=ov.hn
where ov.vstdate between "2011-01-01" and "2011-12-31"
group by ov.hn HAVING DM>0 and HT>0

แนวคิดให้ รวมจำนวนที่มีการ Dx ด้วยทั้ง 2 โรค ถ้ามีทั้ง  2 แสดงว่าเป็นร่วมกันหรือเปล่านา ????
Mr.Apichart Butsoongnoen เจ้าพนักงานสาธารณะ...(สุขชำนาญงาน)General  รับงาน ดูแลระบบรอ... ต.ค.53
Waritchaphum Hospital ,Sakolnakhon
Server :N/A OS:CentOS V N/A Hosxp: V3.54.12.20 RAM : N/A คนเก่าลงไว้ไม่ได้อัพใหม่เลยยังไม่รู้
ขึ้นระบบ โดย ทีมงาน BMS ต.ค.49