Imported from tehnplk/data_transform (
.windsurf/skills/hosxp/SKILL.md). Install upstream withnpx skills add tehnplk/data_transform --skill hosxp. Copyright stays with the author (MIT).
HOSxP Database Skill
Database Connection
| Parameter | Value |
|---|---|
| Container | mariadb |
| User | root |
| Password | 112233 |
| Database | hos11253 |
Usage
เชื่อมต่อฐานข้อมูล
ใช้ docker-mariadb-sql skill สำหรับการรัน SQL queries:
docker exec -i mariadb mysql --default-character-set=utf8 -uroot -p112233 hos11253 -e "SELECT ..."
หมายเหตุ (PowerShell): หากต้องการรัน SQL จากไฟล์ บน Windows PowerShell ใช้การ pipe แทนการ redirect ด้วย <
Get-Content .\query.sql | docker exec -i mariadb mysql --default-character-set=utf8 -uroot -p112233 hos11253
ค้นหาความสัมพันธ์ของตาราง
ใช้ notebooklm skill เพื่อวิเคราะห์โครงสร้างและความสัมพันธ์ระหว่างตาราง
Examples
ตัวอย่างที่ 1: นับจำนวนประชากรแยกรายหมู่บ้าน
SELECT
v.village_moo AS หมู่ที่,
v.village_name AS ชื่อหมู่บ้าน,
COUNT(p.person_id) AS จำนวนประชากร
FROM person p
LEFT JOIN village v ON v.village_id = p.village_id
WHERE p.house_regist_type_id IN (1, 3)
AND p.person_id IS NOT NULL
GROUP BY v.village_moo, v.village_name
ORDER BY CAST(v.village_moo AS UNSIGNED);
ตัวอย่างที่ 2: นับจำนวนผู้ป่วยโรคทางเดินหายใจ
SELECT
COUNT(DISTINCT o.hn) AS จำนวนผู้ป่วย,
YEAR(o.vstdate) AS ปี,
MONTH(o.vstdate) AS เดือน
FROM ovstdiag od
JOIN ovst o ON o.vn = od.vn
WHERE od.icd10 LIKE 'J%'
AND YEAR(o.vstdate) = 2568
GROUP BY YEAR(o.vstdate), MONTH(o.vstdate)
ORDER BY ปี, เดือน;
ตัวอย่างที่ 3: ดึงข้อมูลผู้ป่วยพร้อมที่อยู่แบบเต็ม
SELECT
p.hn,
p.cid,
CONCAT(p.pname, p.fname, ' ', p.lname) AS patient_name,
p.addrpart AS house_no,
p.moopart AS moo,
t3.name AS tambon,
t2.name AS amphur,
t1.name AS changwat
FROM patient p
-- ดึงชื่อตำบล (รหัสจังหวัด 2 หลัก + อำเภอ 2 หลัก + ตำบล 2 หลัก)
LEFT JOIN thaiaddress t3 ON t3.addressid = CONCAT(p.chwpart, p.amppart, p.tmbpart)
-- ดึงชื่ออำเภอ (รหัสจังหวัด 2 หลัก + อำเภอ 2 หลัก + '00')
LEFT JOIN thaiaddress t2 ON t2.addressid = CONCAT(p.chwpart, p.amppart, '00')
-- ดึงชื่อจังหวัด (รหัสจังหวัด 2 หลัก + '0000')
LEFT JOIN thaiaddress t1 ON t1.addressid = CONCAT(p.chwpart, '0000')
LIMIT 10;
Best Practices
- Character Encoding: ใช้
--default-character-set=utf8เพื่อแสดงผลภาษาไทยได้ถูกต้อง - Performance: ใช้
LIMITเมื่อทดสอบ query ครั้งแรก - Date Filtering: ระวังปี พ.ศ. vs ค.ศ. ในฐานข้อมูล HOSxP มักใช้ ค.ศ.
- ICD-10 Codes: โรคทางเดินหายใจเริ่มด้วย 'J', โรคติดเชื้อเริ่มด้วย 'A' หรือ 'B'
- Table Relationships: ใช้
notebooklmskill เพื่อทำความเข้าใจโครงสร้างตารางก่อนเขียน query ซับซ้อน
Common Tables
กลุ่มตาราง ทะเบียนประชากรและที่อยู่
person: ข้อมูลประชากรเชิงรุกvillage: ข้อมูลหมู่บ้านpatient: ทะเบียนประวัติผู้ป่วยของโรงพยาบาลthaiaddress: ข้อมูลรหัสที่อยู่ (ตำบล/อำเภอ/จังหวัด)
กลุ่มตาราง ทะเบียนผู้ป่วยและการรักษาที่ OPD
ovst: ข้อมูลการมารับบริการ OPDopdscreen: ข้อมูลซักประวัติ วัดสัญญาณชีพ และประเมิน Triagevn_stat: สรุปข้อมูลการมารับบริการ OPD แต่ละครั้งovstdiag: การวินิจฉัยโรค OPDopitemrece: รายการค่าใช้จ่าย ยา และเวชภัณฑ์pttype: Lookup สิทธิการรักษา (ผูกกับovst.pttypeหรือvn_stat.pttype)
กลุ่มตาราง IPD
ipt: ข้อมูลการเข้ารับการรักษาของผู้ป่วยใน (IPD)iptdiag: การวินิจฉัยโรค IPDipt(ฟิลด์rw,adjrw): ค่า RW/AdjRW (ใช้คำนวณ CMI/วิเคราะห์ภาระงาน)ipt(ฟิลด์drg,mdc,grouper_version): ผล DRG/MDC และเวอร์ชัน Groupeript_drg_result: ตารางผลประมวลผล DRG (DRG, MDC, RW, AdjRW, error/warn) แยกตามanipt_bed_stat: ข้อมูลสถิติการครองเตียงของผู้ป่วยbedno: ทะเบียนเตียง จัดกลุ่มตาม export_code หลักที่ 4 ตามรูป map_bed.jpg เชื่อมโยงกับตาราง ipt
กลุ่มตาราง LAB
lab_head: ข้อมูลใบสั่ง Lab (Header)lab_order: ข้อมูลรายการ Lab ย่อยและผลตรวจlab_items: ข้อมูลรายการ Lab ทั้งหมดของโรงพยาบาล (Master)
กลุ่มตาราง x-ray
xray_head: ข้อมูลใบสั่ง X-ray (Header)xray_order: รายการ X-ray และผลอ่านxray_items: รหัสมาตรฐานรายการ X-ray
หมายเหตุ: บางหน่วยงานอาจไม่ได้เก็บรายละเอียดรายการที่สั่งใน xray_order แต่เก็บเป็นข้อความรวมใน xray_head.xray_list (ชนิด text) แทน
ตัวอย่าง: ดึงผู้ป่วยที่มีรายการ CXR ในปี 2025 (ค้นจาก xray_head.xray_list)
SELECT
DATE_FORMAT(xh.order_date,'%Y-%m-%d') AS order_date,
xh.vn,
xh.hn,
CONCAT(IFNULL(p.pname,''), IFNULL(p.fname,''), ' ', IFNULL(p.lname,'')) AS patient_name,
xh.department_name,
xh.xray_list
FROM xray_head xh
LEFT JOIN patient p ON p.hn = xh.hn
WHERE YEAR(xh.order_date) = 2025
AND xh.xray_list LIKE '%CXR%'
ORDER BY xh.order_date, xh.vn
LIMIT 20;
กลุ่มตาราง ทันตกรรม
dtmain: ข้อมูลการมารับบริการทันตกรรมdttx: รายการหัตถการทันตกรรม
กลุ่มตาราง ER
er_regist: ทะเบียนผู้ป่วยอุบัติเหตุและฉุกเฉิน (ER)er_nursing_detail: ข้อมูลซักประวัติและคัดกรอง ERer_emergency_level: Lookup ระดับความเร่งด่วน/ระดับคัดกรอง (ใช้ร่วมกับer_regist.er_emergency_level_id)
กลุ่มตาราง REFER
referin: ข้อมูลรับผู้ป่วยส่งต่อ (Refer In)referout: ข้อมูลส่งต่อผู้ป่วย (Refer Out)refer_cause: Lookup สาเหตุการส่งต่อ (เชื่อมกับreferout.refer_cause)moph_refer: ข้อมูลการส่งต่อผ่านระบบ MOPH Refer (ผูกกับvn/hnและอ้างถึงreferout_id)moph_refer_expire_type: Lookup ประเภทหมดอายุ/สถานะหมดอายุของรายการส่งต่อในระบบ MOPH Refer
กลุ่มตาราง การนัดหมาย และ follow up
oapp: ข้อมูลการนัดหมายผู้ป่วยclinicmember: ทะเบียนผู้ป่วยคลินิกโรคเรื้อรังและคลินิกพิเศษ
กลุ่มตาราง แผนก คลินิก และห้องตรวจ
kskdepartment: ข้อมูลแผนกและห้องตรวจต่างๆ ในโรงพยาบาลclinic: ข้อมูลคลินิกเฉพาะโรคและคลินิกพิเศษspclty: ข้อมูลสาขาความเชี่ยวชาญทางการแพทย์
กลุ่มตาราง การฉีดวัคซีน
person_vaccine_list: ประวัติการได้รับวัคซีนของประชากรในเขตรับผิดชอบ (เชิงรุก)ovst_vaccine: ข้อมูลการฉีดวัคซีนที่มารับบริการที่ OPDvaccine: ข้อมูลชนิดของวัคซีน (Lookup)
กลุ่มตาราง งานส่งเสริมป้องกัน และ special PP
pp_special: ข้อมูลงานส่งเสริมป้องกัน (PP) / บริการกลุ่มเป้าหมาย (Special PP)pp_special_code: Lookup รหัสบริการส่งเสริมป้องกันpp_special_type: Lookup ประเภทบริการส่งเสริมป้องกันprovis_ppspecial: ข้อมูลส่งออก/แมปบริการส่งเสริมป้องกันสำหรับงาน Provis
กลุ่มตาราง การแพทย์แผนไทย
cicd10tm: ข้อมูลบันทึกรหัสวินิจฉัยแผนไทย (ICD10TM) ต่อการรับบริการovst_sks_icd10tm: ข้อมูล ICD10TM ที่ใช้ในการเบิก/ส่งออก (เชื่อมโยงกับ OPD)icd10tm_operation: Lookup รหัสหัตถการ/บริการแผนไทย (ICD10TM Operation)ttmt_code: Lookup รหัสยา/ผลิตภัณฑ์สมุนไพรตามมาตรฐาน TMT/TTMT
กลุ่มตาราง Telemedicine
telehealth_list: ข้อมูลรายการรับบริการ Telehealth/Telemedicinetelehealth_type: Lookup ประเภท Telehealth/Telemedicineprscrpt_tele_template: Template ใบสั่งยาสำหรับ Telemedicinetelemed_image_type: Lookup ประเภทไฟล์/รูปภาพที่ใช้ใน Telemedicine
กลุ่มตาราง Lookup พื้นฐาน (รหัสมาตรฐาน)
icd101: รหัสการวินิจฉัยโรคตามมาตรฐาน ICD-10icd9cm1: รหัสหัตถการทางการแพทย์ตามมาตรฐาน ICD-9-CMdrugitems: รายการยาทั้งหมดของโรงพยาบาลnondrugitems: รายการเวชภัณฑ์และค่าธรรมเนียมที่มิใช่ยา
Related Skills
docker-mariadb-sql: สำหรับรัน SQL commands ใน MariaDB containernotebooklm: สำหรับวิเคราะห์โครงสร้างและความสัมพันธ์ของตาราง