ผู้เขียน หัวข้อ: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ  (อ่าน 109418 ครั้ง)

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

doramon

  • บุคคลทั่วไป
ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« เมื่อ: กันยายน 25, 2006, 08:25:15 AM »
0
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 )
« แก้ไขครั้งสุดท้าย: พฤษภาคม 30, 2015, 14:36:08 PM โดย admin »

doramon

  • บุคคลทั่วไป
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #1 เมื่อ: กันยายน 29, 2006, 09:07:23 AM »
0
โค๊ด: SQL
  1. SELECT vn,COUNT(vn) FROM ovst  GROUP BY vn HAVING COUNT(vn) > 1
  2.  

doramon

  • บุคคลทั่วไป
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #2 เมื่อ: กันยายน 29, 2006, 09:08:03 AM »
0
โค๊ด: SQL
  1. CREATE UNIQUE INDEX ix_vn_unique ON ovst (vn)
  2.  

doramon

  • บุคคลทั่วไป
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #3 เมื่อ: กันยายน 29, 2006, 09:09:04 AM »
0
โค๊ด: SQL
  1. CREATE TABLE ovst_temp SELECT * FROM ovst LIMIT 0;
  2. ALTER TABLE ovst_temp MODIFY COLUMN hos_guid VARCHAR(38) NOT NULL UNIQUE PRIMARY KEY;
  3. CREATE UNIQUE INDEX ix_unique ON ovst_temp (vn);
  4. INSERT IGNORE INTO ovst_temp SELECT * FROM ovst;
  5. DROP TABLE ovst;
  6. ALTER TABLE ovst_temp RENAME TO ovst;
  7. CREATE INDEX ix_hn ON ovst (hn);
  8. CREATE INDEX ix_an ON ovst (an);
  9. CREATE INDEX ix_vstdate ON ovst (vstdate);
  10. CREATE INDEX ix_pttype ON ovst (pttype);
  11. CREATE INDEX ix_hn_vstdate ON ovst (hn,vstdate);
  12.  
« แก้ไขครั้งสุดท้าย: กันยายน 29, 2006, 09:12:01 AM โดย doraemon(saiyok) »

ออฟไลน์ Thegapfather

  • Newbie
  • *
  • กระทู้: 12
  • Respect: 0
    • ดูรายละเอียด
    • www.thegapfather.wordpress.com
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #4 เมื่อ: กุมภาพันธ์ 22, 2007, 03:21:26 AM »
0
โห.... ขอบคุณมากครับ

                  รับความรู้ไปอีกบานนนนน   :D
Kitti Limsongtum [GAP]
โรงพยาบาลศูนย์ราชบุรี

ออฟไลน์ naj

  • Hero Member
  • *****
  • กระทู้: 2,449
  • Respect: +10
    • ดูรายละเอียด
    • http://www.luangphopern-hospital.com
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #5 เมื่อ: กุมภาพันธ์ 22, 2007, 08:33:08 AM »
0
เคยสงสัยว่า GESHIใช้งานอย่างงัยขอลองหน่อย
คำสั่งทำ high perfermance ให้กับตารางบางตารางที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา
โค๊ด: SQL
  1. ALTER TABLE ovst TYPE=innodb;
  2. ALTER TABLE patient engine=innodb;
  3.  
Yindee And Tan

doramon

  • บุคคลทั่วไป
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #6 เมื่อ: พฤษภาคม 18, 2007, 23:36:41 PM »
0
ใช้ Script นี้ เพื่อ update allergy data จาก opd_allergy -> patient ครับ

doramon

  • บุคคลทั่วไป
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #7 เมื่อ: พฤษภาคม 18, 2007, 23:38:07 PM »
0
ตัวอยากการนำเข้า SSO text เข้าโปรแกรม hosxp
script

ออฟไลน์ DekB@nB@n

  • Jr. Member
  • **
  • กระทู้: 66
  • Respect: 0
    • ดูรายละเอียด
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #8 เมื่อ: มกราคม 19, 2010, 15:34:59 PM »
0
thank u
Ang :  พนักงานเครื่องคอมโรงพยาบาล ระแงะ จ.นราธิวาส
Notebook :ส่วนตัว Intel  Core 2 Duo
Processor T5750 (2.0 GHz )
HDD :  250  GB
RAM  :   2 GB DDR2
มือใหม่หัดใช้ Hosxp ด้อยความรู้
www.rangaehealth.org/

ออฟไลน์ kee_seka

  • Sr. Member
  • ****
  • กระทู้: 345
  • Respect: +1
    • ดูรายละเอียด
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #9 เมื่อ: มกราคม 19, 2010, 15:51:02 PM »
0
รอความหวัง ครับ อ.อ๊อด   :'( :'(
Narongsak  Tharhaingam
http://sekahos.org
โรงพยาบาลเซกา จังหวัดบึงกาฬ
email   kee_416@hotmail.com
จนท ระบบคอมพิวเตอร์
server HP... ram 12 g hd 146 g centos 6.4  mysql 5.1.42
slave   IBM X... ram 4 g hd 72 g centos 5.3  mysql 5.5.28
salve   HP PC  ram 2 g hd 500 g centos 5.3  mysql 5.1.42
hosxp 3.55.7.14
ความรู้น้อย จะพยายามให้มากศึกษาให้มากขึ้นครับ

ออฟไลน์ kriangkai

  • Newbie
  • *
  • กระทู้: 6
  • Respect: 0
    • ดูรายละเอียด
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #10 เมื่อ: มิถุนายน 04, 2010, 09:39:34 AM »
0
ขอบคุณมากครับพี่ได้แนวความรู้เพิ่ม
อยากสูงต้องหัดอ่าน อยากแตกฉานต้องหัดทำ คิคิ
นายเกรียงไกร ชายา  นวก โรงพยาบาลสีคิ้ว (ลูกจ้างชั่ว...)
เพิ่งจะครบ 2 ปี ..  เบื้องหลังรายการ 9 ปี ด้าน Graphic
jojo_mosaII@hotmail.com

ออฟไลน์ wipatin

  • Newbie
  • *
  • กระทู้: 2
  • Respect: 0
    • ดูรายละเอียด
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #11 เมื่อ: มิถุนายน 04, 2010, 10:55:30 AM »
0
ขอบคุณหลายๆ
 

ออฟไลน์ specialman

  • Newbie
  • *
  • กระทู้: 3
  • เสเอง
  • Respect: 0
    • ดูรายละเอียด
    • โรงพยาบาลเปือยน้อย
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #12 เมื่อ: ธันวาคม 19, 2016, 14:16:36 PM »
0
ขอบคุณมากๆครับ
Seree Buntawee
โรงพยาบาลเปือยน้อย อ.เปือยน้อย จ.ขอนแก่น
https://pnhos.go.th

ออฟไลน์ yantapan_n

  • Jr. Member
  • **
  • กระทู้: 98
  • Respect: 0
    • ดูรายละเอียด
Re: ตัวอย่าง sql รวมไว้จะได้หาง่ายๆๆ
« ตอบกลับ #13 เมื่อ: ธันวาคม 21, 2016, 21:21:32 PM »
0
ขอบคุณมากๆครับ
talee02745