copy \\hosxp\public\software\mysql.exe
mysql -h 192.168.108.254 -u sa -psa hdb
show full processlist;
show databases;
show tables;
describe ipt;
show create table ipt;
select * from pttype;
start -> program -> hosxp -> mysql control center
Name = hdb
Host Name = 192.168.108.254
User Name = sa
Password = sa
เปิด Windows Explorer
\\hosxp\public\
copy MySQL Manager ไว้ที่ C:\Program File\
SELECT * FROM pttype WHERE pcode='UA'
AND pttype='98'
SELECT * FROM pttype WHERE (pcode = ‘A1’ OR pcode = ‘A2’) AND (pttype = ’10’ or pttype = ’20’)
SELECT pttype,name FROM pttype
ORDER BY pcode,name
SELECT * FROM pttype LIMIT 5
จงแสดงรายชื่อผู้ป่วยที่มีชื่อแรกว่า สมชาย
SELECT *
FROM patient
WHERE fname = 'สมชาย'
จงแสดงรายชื่อผู้ป่วยที่มีนามสกุลว่า แข็งขัน
แสดงเฉพาะ HN,ชื่อ,นามสกุล
SELECT hn,pname,fname,lname
FROM patient
WHERE lname = 'แข็งขัน'
จงแสดงรายชื่อผู้ป่วย ที่อยู่ที่จังหวัด กรุงเทพมหานคร แสดงเฉพาะ HN, ชื่อ, นามสกุล
(เปิดตาราง thaiaddress ดูรหัสจังหวัด)
SELECT hn,fname,lname
FROM patient
WHERE chwpart='??'
แสดงรายชื่อผู้ป่วยที่มีชื่อ เหมือน สม
SELECT *
FROM patient
WHERE fname LIKE 'สม%'
SELECT COUNT(*)
FROM patient
WHERE fname LIKE 'สม%'
SELECT sex,pname,count(*)
FROM patient
WHERE fname LIKE 'สม%'
GROUP BY sex,pname
SELECT *
FROM patient
การรวม Character
ใช้ function CONCAT
SELECT hn,CONCAT(pname,fname,' ',lname)
FROM patient
WHERE fname LIKE 'สม%'
การ ตั้งชื่อ column ใช้ AS
SELECT CONCAT(pname,fname,' ',lname) as NAME
FROM patient
WHERE fname LIKE 'สม%'
การระบุ Field ที่เป็น วันที่ ใช้รูปแบบ yyyy-mm-dd (ปี ค.ศ.)
เช่น '2004-01-11'
จงแสดงผู้ที่เกิดวันที่ 10 กุมภาพันธ์ 2510
SELECT *
from patient
where birthday = '1967-02-10'
จงแสดงผู้มารับบริการในวันที่ 10 สิงหาคม 2547
แสดงเฉพาะ HN, ชื่อ, เวลาที่มารับบริการ,ประเภทโรค,
วันเกิด, ชื่อประเภทโรค ในช่วงเวลา 08.00 - 10.00 น.
เฉพาะ ประเภท อายุรกรรม, จักษุ , สูติกรรม
SELECT ovst.hn,ovst.vsttime,ovst.spclty,
concat(patient.fname,' ',patient.lname) as patient_name, patient.birthday , spclty.name
FROM ovst
LEFT OUTER JOIN patient on patient.hn=ovst.hn
LEFT OUTER JOIN spclty on spclty.spclty=ovst.spclty
WHERE ovst.vstdate = '2004-08-10'
AND ovst.vsttime >= '08:00:00'
AND ovst.vsttime <= '10:00:00'
AND ovst. spclty IN ( '01' , '07' , '03' )
ORDER BY spclty.name
จงหาว่าในวันที่ 20 กรกฎาคม 2547 มีผู้มารับบริการในประเภทโรคต่างๆ กี่ครั้ง
การตัดข้อมูลซ้ำกันออกใช้ DISTINCT เช่น count(distinct hn)
จงหาว่า ในเดือน สิงหาคม มีผู้ป่วยมารับบริการ กี่คน
จงหาว่า ในเดือน สิงหาคม มีผู้ป่วยมารับบริการ กี่ครั้ง
SELECT count(distinct hn) from ovst where
vstdate between '2004-08-01' and '2004-08-31'
SELECT count(hn) from ovst where
vstdate between '2004-08-01' and '2004-08-31'
จงหาว่า ในเดือน สิงหาคม มีผู้ป่วยมารับบริการใหม่ในปี กี่คน
จงหาว่า ในเดือน สิงหาคม มีผู้ป่วยมารับบริการใหม่ในเดือน กี่คน
SELECT count(distinct hn) from vn_stat where
vstdate between '2004-08-01' and '2004-08-31'
AND count_in_year = 0
จงหาว่า ในเดือน สิงหาคม มีผู้ป่วย Admit กี่คน (ipt)
จงหาว่า ในเดือน สิงหาคม มีผู้ป่วย Admit กี่ครั้ง (ipt)
จงหาว่าในเดือนสิงหาคม 2547 มีผู้ป่วยเป็นโรคต่างๆ อะไรบ้าง กี่ครั้ง (แสดง pdx,จำนวน) เรียงลำดับ แสดง 20 รายการแรก (จากมากไปน้อย) (vn_stat) ORDER BY ... DESC
SELECT pdx,count(*) as pdx_count
FROM vn_stat
WHERE vstdate between '2004-08-01' and '2004-08-31'
GROUP BY pdx
ORDER BY pdx_count DESC
LIMIT 20
แสดงชื่อโรคด้วย (icd101)
SELECT v.pdx,i.name,count(v.pdx) as pdx_count
FROM vn_stat v
LEFT OUTER JOIN icd101 i on i.code=v.pdx
WHERE v.vstdate between '2004-08-01' and '2004-08-31'
GROUP BY v.pdx,i.name
ORDER BY pdx_count DESC
LIMIT 20
การแสดงที่อยู่ โดยการทำ multiple join
SELECT p.hn,p.fname,p.lname,
t1.name as chw_name, t2.name as amp_name,
t3.name as tmb_name
FROM patient p
LEFT OUTER JOIN thaiaddress t1 on t1.chwpart=p.chwpart
and t1.codetype='1'
LEFT OUTER JOIN thaiaddress t2 on t2.chwpart=p.chwpart
and t2.amppart=p.amppart and t2.codetype='2'
LEFT OUTER JOIN thaiaddress t3 on t3.chwpart=p.chwpart
and t3.amppart=p.amppart
and t3.tmbpart=p.tmbpart and t3.codetype='3'
WHERE p.fname LIKE 'สมช%'
จงหาจำนวนของผู้ป่วยที่อยู่ในตำบลต่างๆ ใน อ.โพธาราม
แยกเป็น รหัสตำบล,ชื่อตำบล , จำนวนผู้ป่วยในตำบล
SELECT p.tmbpart,count(p.hn) as patient_count,
t.name as tmb_name
FROM patient p
LEFT OUTER JOIN thaiaddress t on t.chwpart=p.chwpart
AND t.amppart=p.amppart AND t.tmbpart=p.tmbpart
AND t.codetype='3'
WHERE p.chwpart='70' AND p.amppart='07'
GROUP BY p.tmbpart,t.name
จงหาค่าใช้จ่ายทั้งหมดของผู้ป่วยนอกที่มาใช้บริการในเดือน สิงหาคม (vn_stat.income)
select sum(income) from vn_stat where vstdate between '2004-08-01' and '2004-08-31'
จงหาว่าโรคอะไรที่มีค่าใช้จ่ายรวมแล้วมากที่สุด ของเดือนสิงหาคม
(vn_stat.main_pdx, vn_stat.income)
SELECT main_pdx,sum(income) as sum_income
FROM vn_stat
WHERE vstdate between '2004-08-01' and '2004-08-31'
GROUP BY main_pdx
ORDER BY sum_income DESC
LIMIT 20
จงหาว่าแพทย์ท่านใดตรวจคนไข้มากที่สุดในเดือน สิงหาคม
(vn_stat.dx_doctor)
SELECT dx_doctor,count(dx_doctor) as count_dx
FROM vn_stat
WHERE vstdate between '2004-08-01' and '2004-08-31'
GROUP BY dx_doctor
ORDER BY count_dx DESC
LIMIT 20
และแพทย์ท่านนี้ สั่งจ่ายยา/เวชภัณฑ์ ในเดือนสิงหาคม มีมูลค่าเท่าไร
select sum(inc12) from vn_stat where dx_doctor='19' and vstdate between '2004-08-01' and '2004-08-31'
จงหาว่าโรคใดที่ผู้ป่วยกลับมารักษาภายใน 7 วัน มากที่สุดในเดือนสิงหาคม (vn_stat.lastvisit)
SELECT main_pdx,count(pdx) as pdx_count
FROM vn_stat
WHERE lastvisit <= 7 AND vstdate between '2004-08-01' and '2004-08-31'
GROUP BY main_pdx
ORDER BY pdx_count DESC
LIMIT 20
ตาราง opitemrece
รหัสเวชภัณฑ์ icode รายละเอียดอยู่ในตาราง s_drugitems หรือ drugitems
จงหาว่ายาตัวใดถูกสั่งจ่ายมากที่สุดในเดือนสิงหาคม
(opitemrece.icode)
select o.icode,s.name,sum(o.qty) as sum_qty
from opitemrece o
left outer join s_drugitems s on s.icode=o.icode
where o.vstdate between '2004-08-01' and '2004-08-31'
group by o.icode ,s.name
order by sum_qty desc
จงหาว่ายาตัวใดมีมูลค่าการใช้มากที่สุดในเดือนสิงหาคม
(opitemrece.icode)
select o.icode,s.name,sum(o.qty*o.unitprice) as sum_price
from opitemrece o
left outer join s_drugitems s on s.icode=o.icode
where o.vstdate between '2004-08-01' and '2004-08-31'
and o.icode like '1%'
group by o.icode ,s.name
order by sum_price desc
จงแสดงรายการยาและจำนวน ที่มีการใช้ในผู้ป่วยที่เป็นโรคเบาหวาน ในเดือนสิงหาคม
select o.icode,d.name,sum(o.qty) as pay_qty
from vn_stat v, opitemrece o, drugitems d
where v.vstdate between '2004-08-01' and '2004-08-31'
and v.main_pdx like 'E1%' and v.vn = o.vn
and o.icode=d.icode
group by o.icode,d.name
order by pay_qty desc
ระยะเวลา service_time
เวลาที่ลงทะเบียน = service3
เวลาพิมพ์ใบเสร็จ = service7
total time = service7 - service3
ตรวจสอบข้อมูล แสดง
select count(*),(sum((service7-service3))/count(*)) as total_time from service_time
where vstdate between '2004-09-01' and '2004-09-30'
and service3 is not null and service6 is not null
and service6>service3
and (service7 - service3) < 18000
and service3 > '09:30:00'
order by vn desc
จงหาจำนวนรายการเวชภัณฑ์ยา ที่ถูกจ่ายให้ผู้ป่วยใน ในเดือนสิงหาคม 2547
select an,rxdate, count(icode) as icode_count
from opitemrece
where vstdate between '2004-09-01' and '2004-09-30'
and an is not null and an <>''
and icode like '1%'
group by an,rxdate
ขั้นตอนการทำรายงาน
1. เตรียมข้อมูล (คำสั่ง SQL)
2. นำคำสั่งที่ได้ ไปทำรายงานในระบบ Report Designer
SELECT v.pdx,i.name,count(v.pdx) as pdx_count
FROM vn_stat v
LEFT OUTER JOIN icd101 i on i.code=v.pdx
WHERE v.vstdate between '2004-08-01' and '2004-08-31'
GROUP BY v.pdx,i.name
ORDER BY pdx_count DESC
LIMIT 20
จงแสดงจำนวนผู้ป่วยที่อยู่ใน หมู่บ้านต่างๆ ของตำบล 01 อ.โพธาราม (patient.moopart)
แสดงรายชื่อผู้ป่วยที่เป็นลูกหนี้ (จริงๆ) ทั้งหมด ว่ามีใครบ้าง
(vn_stat.remain_money > 0)
แสดงรายชื่อผู้มารับบริการในวันที่ 20 สิงหาคม 2547 ว่ามีใครบ้างที่ใช้สิทธิ บัตรทอง 30 บาท (vn_stat.pcode = 'UC')
จงแสดงรายชื่อผู้ป่วยที่มารับบริการในเดือน สิงหาคม 2547 ที่ใช้สิทธิเป็น บัตรทอง และ บัตรจะหมดอายุใน เดือน มกราคม 2548
(vn_stat.pttype_expire)
จงแสดงรายชื่อผู้ป่วยที่มารับบริการในวันที่ 15 สิงหาคม 2547 ที่มามากกว่า 1 ครั้ง ในวัน
จงแสดงรายชื่อผู้ป่วยที่ มารับบริการในวันที่ 18 สิงหาคม 2547 ที่ใช้สิทธิ ชำระเงินครบ (pcode = 'A1') และต้องชำระเงิน แต่ห้องชำระเงิน ไม่ได้ลงรับเงิน (paid_money < income )