สารบัญ

โครงสร้าง แฟ้ม service

/*service death*/

select o.vstdate,p.pname,concat(p.fname,space(1),p.lname) as person_name ,p.death,p.discharge_date

from ovst o

inner join person p on p.patient_hn = o.hn

inner join deathperson d on d.cid = p.cid

where d.death_date < o.vstdate

#================

/*LOCATION ที่ตั้งของที่อยู่ผู้รับบริการ 1 = ในเขตรับผิดชอบ, 2 = นอกเขตรับผิดชอบ มาจากความเชื่อมโยง ระหว่าง แฟ้ม person (บัญชี 1 ต้องนำผู้ป่วยเข้า บัญชี 1)

กับแฟ้ม ovst field ที่ เก็บ สถานะ คือ house_regist_type_id */

/*เรียกดู house_regist_type_id */

SELECT

house_regist_type.house_regist_type_id,

house_regist_type.house_regist_type_name,

house_regist_type.export_code

FROM

house_regist_type

#===============

ตัวอย่าง

house_regist_type_id house_regist_type_name export_code
0 มาอาศัยในเขตรับผิดชอบแต่ไม่ได้อยู่ตามทะเบียนบ้านในเขตรับผิดชอบ 5
1 1-มีชื่ออยู่ตามทะเบียนบ้านในเขตรับผิดชอบและอยู่จริง 1
2 2-มีชื่ออยู่ตามทะเบียนบ้านในเขตรับผิดชอบแต่ตัวไม่อยู่จริง 2
3 3-มาอาศัยอยู่ในเขตรับผิดชอบ(ตามทะเบียนบ้านในเขตรับผิดชอบ)แต่ทะเบียนบ้านอยู่นอกเขตรับผิดชอบ 3
4 4-ที่อาศัยอยู่นอกเขตรับผิดชอบและเข้ามารับบริการ 4

/*TYPEIN มีรหัสไม่ตรงมาตรฐาน ดู ovstist*/

/*1 = มารับบริการเอง, 2 = มารับบริการตามนัดหมาย,

3 = ได้รับการส่งต่อจากสถานพยาบาลอื่น,

4 = ได้รับการส่งตัวจากบริการ EMS */

SELECT * from ovstist;

#======================

ตัวอย่าง

name ovstist export_code
นัดมา 2 2
นัดมาทำแผล 7 2
มาเอง (ห้องบัตร) 1 1
รับต่อจาก Emergency Room 5 1
รับต่อจาก ห้องคลอด 6 1
รับต่อจากสถานพยาบาลอื่น 4 1
รับต่อจากห้องตรวจโรค 3 1

/*1 = จำหน่ายกลับบ้าน, 2 = รับไว้รักษาต่อในแผนกผู้ป่วยใน,3 = ส่งต่อไปยังสถานพยาบาลอื่น

, 4 = เสียชีวิต, 5 = เสียชีวิตก่อนมาถึงสถานพยาบาล, 6 = เสียชีวิตระหว่างส่งต่อไปยังสถานพยาบาลอื่น

,7= ปฏิเสธการรักษา, 8 = หนีกลับ*/

/*TYPEOUT add == field export_code */

select o.name,o.name,o.export_code,o.item_no from ovstost o

#===============

ตัวอย่าง

name name export_code item_no
รอผลตรวจ รอผลตรวจ 1
Admit แผนกอายุรกรรม Admit แผนกอายุรกรรม 2
Admit แผนกศัลยกรรม Admit แผนกศัลยกรรม 2
Admit แผนกสูติกรรม Admit แผนกสูติกรรม 2
Admit แผนกนรีเวชกรรม Admit แผนกนรีเวชกรรม 2
Admit แผนกกุมารเวชกรรม Admit แผนกกุมารเวชกรรม 2
Admit แผนกโสตนาสิก Admit แผนกโสตนาสิก 2
Admit แผนกจักษุ Admit แผนกจักษุ 2
Admit แผนกศัลยกรรมกระดูก Admit แผนกศัลยกรรมกระดูก 2
Admit แผนกจิตเวช Admit แผนกจิตเวช 2
Admit แผนกรังสีวิทยา Admit แผนกรังสีวิทยา 2
Admit แผนกทันตกรรม Admit แผนกทันตกรรม 2
Admit แผนกอื่นๆ Admit แผนกอื่นๆ 2
Admit แผนกอุบัติเหตุ Admit แผนกอุบัติเหตุ 2
Admit สังเกตุอาการ Admit สังเกตุอาการ 2
ตายที่แผนกผู้ป่วยนอก ตายที่แผนกผู้ป่วยนอก 4
ส่งต่อสถานพยาบาลอื่น ส่งต่อสถานพยาบาลอื่น 3
ตรวจรักษาที่แผนกส่งเสริมสุขภาพ ตรวจรักษาที่แผนกส่งเสริมสุขภาพ 1
ตรวจรักษาที่แผนก ตรวจรักษาที่แผนก 1
ตรวจรักษาที่ห้อง ER ตรวจรักษาที่ห้อง ER 1
รอรับยา รอรับยา 1
ตรวจแล้ว ตรวจแล้ว 1


/*LOCATION ที่ตั้งของที่อยู่ผู้รับบริการ จะเห็นว่าบางส่วน ขาดความเชื่อมโยง Patient VS Person*/

SELECT

ovst.vn,ovst.hn,ovst.vstdate,person.pname
,concat(person.fname,space(1),person.lname)as'person_name'
,person.house_regist_type_id

from ovst

LEFT OUTER JOIN person on person.patient_hn = ovst.hn

WHERE ovst.vstdate BETWEEN concat(year(CURDATE())-1,'-','10-01')
and concat(year(CURDATE()),'-','09-30')

and person.house_regist_type_id is null

ORDER BY ovst.vn

#==================

ตัวอย่าง

vn hn vstdate pname person_name house_regist_type_id
161004161558 108173 2016-10-04 ด.ญ. วิภาพร xxx
161012092109 108262 2016-10-12 ด.ช. อานุชา xxx
591001000654 107904 2016-10-01
591001051645 64710 2016-10-01

/*ขาดความเชื่อมโยง Patient VS Person */

SET @date1 ='2015-10-01',@date2= '2016-09-30';

/*เปลี่ยนวันที่ตามต้องการ*/

SELECT s.vstdate,pt.pname

,CONCAT(pt.fname,SPACE(1),pt.lname)AS'patient_name'

,pt.nationality

,IF(pt.type_area IS NULL ,'ฝั่ง patient ว่าง', pt.type_area)AS type_area

,p.cid

FROM ovst s

INNER JOIN patient pt

ON pt.hn = s.hn

INNER JOIN thaiaddress a

ON a.addressid = pt.addressid

LEFT JOIN person p

ON p.cid = pt.cid

WHERE p.cid IS NULL

AND s.vstdate BETWEEN @date1 AND @date2

ORDER BY pt.nationality,s.vstdate;

#================

ตัวอย่าง

vstdate pname patient_name nationality type_area cid
2016-07-08 ด.ช. ทินภัทร xxxx 99 ฝั่ง patient ว่าง null
2016-07-08 นาย ประสิทธิ์พร xxxx 99 ฝั่ง patient ว่าง null
2016-07-08 นาย ประสิทธิ์พร xxxx 99 ฝั่ง patient ว่าง null
2016-07-08 นาย สิรกร xxxx 99 ฝั่ง patient ว่าง null

/*ไม่มีสิทธิใดๆ ดูจากแต่ละ visit */

SET @date1 ='2013-10-01',@date2= '2016-09-30';

/*ovst.vstdate BETWEEN

concat(year(CURDATE())-1,'-','10-01')

AND concat(year(CURDATE()),'-','09-30')*/

SELECT

ovst.vstdate,

patient.pname,

CONCAT(patient.fname,SPACE(1),patient.lname)AS patient_name,

ovst.vsttime,

provis_instype.`code`AS 'รหัสสิทธิ',

provis_instype.`name`AS 'สิทธิ',

provis_instype.pttype_std_code

FROM

ovst

INNER JOIN patient ON patient.hn = ovst.hn

LEFT OUTER JOIN pttype

ON pttype.pttype = ovst.pttype

LEFT JOIN provis_instype

ON provis_instype.code = pttype.nhso_code

WHERE

ovst.vstdate BETWEEN @date1 AND @date2

AND ovst.pttype IS NULL

#=================

ตัวอย่าง

vstdate pname patient_name รหัสสิทธิ สิทธิ pttype_std_code
2015-12-09 นาง เพ็ญแข xxxx

/*ผู้มารับริการ type 3 , 4 ที่เชื่อมโยง กับ person , address หรือไม่*/

SET @date1 ='2015-03-01'; #วันที่รับบริการเปลี่ยน '2015-03-01'ตามต้องการ

SET @date2 ='2015-03-01';

SELECT

MIN(s.vstdate) AS 'visit_date',

p.pname,

CONCAT(p.fname, SPACE(1), p.lname) AS 'person_name',

TIMESTAMPDIFF(YEAR, p.birthdate, s.vstdate) AS 'age',

p.house_regist_type_id AS 'type_area',

IF(pa.addrpart IS NULL,'null',pa.addrpart ) AS 'address',

IF(pa.moopart IS NULL,'null',pa.moopart) AS 'moo',

IF(pa.tmbpart IS NULL,'null',pa.tmbpart ) AS 'tumbol',

IF(pa.amppart IS NULL,'null',pa.amppart ) AS 'ampur',

IF(pa.chwpart IS NULL,'null',pa.chwpart ) AS 'changwat',

IF(hs.house_subtype_id IS NULL,'null',hs.house_subtype_name) AS 'ประเภทบ้าน',

DATE(p.last_update ) AS last_update

FROM

ovst AS s

LEFT JOIN person AS p

ON p.patient_hn = s.hn

INNER JOIN house AS h

ON h.house_id = p.house_id

LEFT OUTER JOIN person_address AS pa

ON pa.person_id = p.person_id

LEFT JOIN house_subtype AS hs

ON hs.house_subtype_id = h.house_subtype_id

WHERE s.vstdate BETWEEN @date1

AND @date2

AND p.house_regist_type_id IN ('3', '4')

GROUP BY s.hn

#===================

ตัวอย่าง

visit_date pname person_name age type_area address moo tumbol ampur changwat ประเภทบ้าน last_update
2015-03-01 นาง เจริญศรี xxxx 53 4 null null null null null บ้านเดี่ยว บ้านฝด 2017-04-12
2015-03-01 น.ส. เปรมจิต xxxx 37 4 null null null null null บ้านเดี่ยว บ้านฝด 2017-01-31
2015-03-01 นาง อารีย์ xxxx 54 4 null null null null null บ้านเดี่ยว บ้านฝด 2017-04-18
2015-03-01 น.ส. ลูกจันทร์ xxxx 38 4 null null null null null บ้านเดี่ยว บ้านฝด 2017-04-20
2015-03-01 น.ส. อุดม xxxx 50 4 null null null null null บ้านเดี่ยว บ้านฝด 2017-03-29


 

/*Visit no diag*/

SET @date1 ='2015-10-01',@date2 = '2017-09-30';

SELECT

ovst.vstdate

, patient.pname

, CONCAT(patient.fname ,SPACE(1), patient.lname)AS patient_name

,ovst.diag_text

, ovstdiag.icd10,ovstost.name AS ovstost

FROM

hos.ovst

INNER JOIN ovstost

ON ovstost.ovstost =ovst.ovstost

LEFT JOIN hos.ovstdiag

ON (ovst.vn = ovstdiag.vn)

INNER JOIN hos.patient

ON (patient.hn = ovst.hn)

WHERE ovstdiag.icd10 IS NULL

AND ovst.vstdate BETWEEN @date1 AND @date2

ORDER BY ovst.vstdate ASC;

ตัวอย่าง

vstdate pname patient_name diag_text icd10 ovstost
2015-10-09 นาย ชวลิต xxx รอผลตรวจ
2015-10-09 น.ส. เบ็ญจมาศ xxx รอผลตรวจ
2015-10-09 น.ส. สุวรรณี xxx รอผลตรวจ
2015-10-09 นาย ธวัช xxx รอผลตรวจ

/*service เกิดทีหลัง จำหน่าย */

select p.discharge_date,

o.vstdate as 'วันมารักษา',

p.pname,concat(p.fname,space(1),p.lname)as'person_name',

o.diag_text,d.icd10,i.name

from ovst o

inner join person p on p.patient_hn = o.hn

left join ovstdiag d on d.vn = o.vn

left join icd101 i on i.code = d.icd10

where p.discharge_date < o.vstdate

#------------

ตัวอย่าง

discharge_date วันมารักษา pname person_name diag_text icd10 name
6/3/2015 12/7/2015 นาง กุ่ย xxx null Z123 Special screening examination for neoplasm of breast
4/12/2011 20/12/2011 นาย มงคลชัย xxx null null null
22/12/2011 23/12/2011 นาง สาคร xxx null Z027 Issue of medical certificate
27/4/2016 29/9/2016 นาง วรรณดี xxx null null null
27/4/2016 22/12/2016 นาง วรรณดี xxx null 9920 null


 

/* service ผู้ที่เสียชีวิตแล้ว เกิน 60 วัน */

SELECT o.vstdate,date(d.ddeath)as 'วันที่ตาย',

timestampdiff(day,d.ddeath,o.vstdate)as 'ตายมาแล้ว..วัน',

p.pname,concat(p.fname,space(1),p.lname)as 'person',s.name as 'สถานะหลังตรวจ'

FROM provis_death d

INNER JOIN patient p ON p.cid = d.cid

INNER JOIN ovst o ON o.hn =p.hn

inner join ovstost s on s.ovstost =o.ovstost

WHERE timestampdiff(day,d.ddeath,o.vstdate)>60

#-----------------

ตัวอย่าง

vstdate วันที่ตาย ตายมาแล้ว..วัน pname person สถานะหลังตรวจ
4/10/2012 7/3/2010 942 นาย ลือชัย xxx รอผลตรวจ
15/9/2010 13/5/2010 125 นาง มะปราง xxx รอผลตรวจ
21/10/2011 17/4/2011 187 นาง จำเนียร xxx รอรับยา
11/11/2011 17/4/2011 208 นาง จำเนียร xxx ตรวจแล้ว
8/1/2013 17/4/2011 632 นาง จำเนียร xxx รอรับยา
24/1/2013 17/4/2011 648 นาง จำเนียร xxx Admit แผนกอายุรกรรม