Showing posts with label คำสั่ง SQL. Show all posts
Showing posts with label คำสั่ง SQL. Show all posts

Thursday, May 1, 2014

ทดสอบคำสั่ง update table แบบ Multi row record ใน MySql

ยกตัวอย่าง ผมต้องการเอาข้อมูล HN จากตารางที่ 2 มาใส่ในตารางที่ 1 โดยผมเชื่อมด้วย vn
ตอนแรกผมเชื่อมกับตาราง vn_stat โดยตรงซึ่งข้อมูล ใหญ่มาก     ผมเลยสร้างตารางขึ้นมาใหม่ l_clinic_hn ซึ่งเก็บข้อมูล vn and hn ไว้

[SQL] UPDATE clinicmember_cormobidity_screen t1 ,(SELECT * from l_clinic_hn) as t2
SET t1.hn=t2.hn
WHERE t1.vn = t2.vn

Affected rows: 214
Time: 3.777ms

OK  ผ่านครับ
เรียนรู้มาจากเว็บนี้ครับ http://www.ict.buu.ac.th/Blog/Lists/Posts/Post.aspx?ID=1009

Friday, August 23, 2013

ลบข้อมูล clinic ANC ที่ไม่อยู่ในเงื่อนไข โรคเรื้อรัง



บันทึก ลบข้อมูล  clinic ANC ที่ไม่อยู่ในเงื่อนไข โรคเรื้อรัง
สำรอง Clinicmember.cds
คำสั่ง ลบ
delete from clinicmember
where clinic = "004"
2493  record

หายวับ.... ไปกับตา ^______^
By prasertsak Keepper

Tuesday, August 20, 2013

คำสั่ง Update SQL สถานะบ้านให้อยู่เขต อบต.

UPDATE house SET location_area_id =  "1"
WHERE village_id in ("17","18","19","20","21","22")

คำสั่งสั้นๆ  location_area_id  1 เขตเทศบาล  2 เขตอบต.
โดยให้เงื่อนไข ตามชุมชนที่เราเพิ่มเข้าไป

By Prasertsak Keepper

Wednesday, June 12, 2013

รายงานตามคำขอ ผู้มารับบริการที่ ER คลินิค COPD และ Asthma /พี่อ็อด


ตัวอย่างรายงานผู้มารับบริการที่ ER คลินิค COPD และ Asthma /พี่อ็อด
SQL Code

begin

      GetDateRangeDialog(d1, d2);
       ds1 :=  FormatThaiDate('YYYY-MM-DD', d1);
       ds2 :=  FormatThaiDate('YYYY-MM-DD', d2);
    ChangeReportSQL('select e.vstdate,e.enter_er_time,e.vn,o.hn,CONCAT(p.pname,p.fname,"  ",p.lname) as ptname,o.icd10,i.`name` as ICD,d.`name`,t.name as erd from er_regist e    '+
                      'left outer join ovstdiag o on o.vn=e.vn   '+
                      'LEFT OUTER JOIN doctor d on d.`code`=e.er_doctor '+
                      'LEFT OUTER JOIN patient p on p.hn=o.hn  '+
                      'LEFT OUTER JOIN icd101 i on i.`code`=o.icd10   '+
                      'LEFT OUTER JOIN er_dch_type t on t.er_dch_type=e.er_dch_type   '+
                      'where e.vstdate between "'+ds1+'" and "'+ds2+'" and i.`name` LIKE "%chronic obstructive pulmonary disease%"   '+
                      'GROUP BY e.vn');


end;
ตารางหลัก er_regist  เก็บข้อมูลคนไข้ที่มาลงทะเบียนรับบริการที่ ห้องฉุกเฉิน
ตารางอื่นๆ ovstdiag  เชื่อมเพื่อดึง ข้อมูลการวินิจฉัย
doctor  ชื่อแพทย์
 patient ข้อมูลผู้รับบริการ
icd101 ข้อมูลชื่อโรค
er_dch_type  สถานะการจำหน่าย

เงื่อนไข
กำหนดเงื่อนไข ช่วงเวลาที่มารับบริการ และชื่อโรค

จบ 
@keepper

ดาวโหลดตัวอย่างรายงาน  >>> คลิก <<<
QR

Monday, June 10, 2013

SQL นับจำนวน ผู้รับบริการ WBC และ EPI Clinic /พี่น้ำ

ภาพประกอบจาก Internet
     เมื่อเราต้องการทราบว่า มีเด็กมารับบริการ ฉีดวัคซีนไปแล้วกี่คน ในระยะเวลาที่กำหนด แต่ติดปัญหาอยู่ตรงว่า HOSxP มีการเก็บข้อมูลอยู่ 2 ตาราง คือ  person_wbc_service  เก็บการมารับบริการ 0-1 ปี  person_epi_vaccine เก็บการมารับบริการ 1-6 ปี  แต่ยังมีการเชื่อด้วย VN 555+ ค่อยยังดีหน่อย เลยเขียน SQL แบบ Sup Query ได้ดังนี้ เสนอแนะอย่างไรแสเงความคิดเห็นได้เต็มที่น่ะครับ

Code SQL

SELECT COUNT(DISTINCT v.hn) from vn_stat v
LEFT OUTER JOIN person p on p.patient_hn=v.hn
WHERE v.age_m in ("9","10","11","12")and v.vstdate BETWEEN "2012-10-01" and "2013-09-30" and p.village_id = "1"
and (v.vn in (SELECT w.vn from person_wbc_service w WHERE w.service_date BETWEEN "2012-10-01" and "2013-09-30" ) 
or v.vn in (SELECT e.vn FROM person_epi_vaccine  e WHERE e.vaccine_date BETWEEN "2012-10-01" and "2013-09-30")) 

Keepper 

Tuesday, May 7, 2013

SQL ดึงรายชื่อ Clinic HT ที่มีค่าความดันมากกว่า 140/90 mmHg /พี่แจ๋ว OPD

คำสัง SQL  ดึงรายชื่อผู้ป่วยในคลินิค HT ที่มีค่าความดัน มากกว่า หรือเท่ากับ 140/90 mmHg 
ดังนี้

SELECT o.vstdate,o.hn,p.cid,CONCAT(p.pname,p.fname,"  ",p.lname) as ptname,p.informaddr,v.age_y,bps,bpd 
from opdscreen o
LEFT OUTER JOIN patient p on p.hn=o.hn
LEFT OUTER JOIN vn_stat v on v.vn=o.vn
WHERE o.vstdate BETWEEN "2013-04-01" and "2013-04-30" and (o.bps > "139" or o.bpd > "89")
and o.hn in (SELECT hn from clinicmember WHERE clinic = "003")

จากฐานข้อมูล HOSxP
เชื่อมตาราง
1.patient ดึงค่าขอมูลผู้มารับบริการ  เชื่อมด้วย HN
2. vn_stat  ดึงค่าอายุวันที่มารับบริการ  เชื่อมด้วย VN
เงื่อนไข
1. วันที่มารับบริการเดือนเมษายน 2556
2. เป็นผู้ป่วยที่อยู่ในคลินิค ความดัน 003
3. ค่าความดันมากกว่า หรือเท่ากับ 140/90 

@keepper


Tuesday, April 30, 2013

ปรับฐานข้อมูลโรคเรื้อรังให้เป็นปัจจุบัน/น้องฝน สีสุก

 ก่อนเริ่มปีงบประมาณ 2557   ยอดเป้าหมายแฟ้ม Chronic จะต้องดำเนินการให้เป็นปัจจุบัน ซึ่งทางโรงพยาบาลเป็นผู้ดำเนินการขึ้นทะเบียนการรับบริการคลินิคโรคเรื้อรัง ระดับอำเภอ
   วันนี้ได้รับ ข้อความขอรายชื่อ ทะเบียนโรคเรื้อรังทั้งหมด รพ.สต. สีสุก



และคำสังดึงข้อมูลจากฐานข้อมูล HOS_xP มีดังนี้ 




คำสั่ง SQL


SELECT CONCAT(a.pname,a.fname,"  ",a.lname) as ptname,a.cid,l.`name`,a.tmbpart,a.addrpart,a.informaddr,
c.regdate,c.lastvisit,c.begin_year,c.send_to_pcu,send_to_pcu_hcode from clinicmember c
LEFT OUTER JOIN person p on c.hn=p.patient_hn
LEFT OUTER JOIN patient a on a.hn=c.hn
LEFT OUTER JOIN village v on v.village_id=p.village_id
LEFT OUTER JOIN clinic l on c.clinic=l.clinic
WHERE  c.clinic_member_status_id in ("1","2") and a.tmbpart = "04" and a.amppart = "06" and l.chronic = "Y"
ORDER BY l.clinic

เงื่อนไข คือ ผู้ป่วยอยู่ในสถานะติดตามรับการรักษา และส่งต่อลงอนามัย  รหัสตำบล 04 รหัส อำเภอ 06 และสถานะคลินิคเป็น Y คือ โรคเรื้อรัง

หน่วยงานใดต้องการอัพเดทข้อมูล ส่ง Email มาข้อมูลได้ครับ
@keepper

Wednesday, April 24, 2013

SQL 10 อันดับนามสกุล ในคลินิคเบาหวาน& ความดัน

มาเรียนรู้การเรียงอันดับข้อมูลที่น่าสนใจ งานโรคเรื้อรังเบาหวาน ความดัน  ไม่มีนัยสำคัญทางสถิติ น่ะครับ ^^!

เขตตำบลจักราช 
คำสั่ง SQL เทียบ กับ แฟ้ม Person

SELECT p.lname,COUNT(hn) as cc FROM clinicmember c
LEFT OUTER JOIN person p on p.patient_hn=c.hn
WHERE c.clinic = "001" and p.village_id <> "1" 
GROUP BY p.lname
ORDER BY cc DESC
limit 10


เบาหวาน 

ความดัน

-------------------------------------------------------------------------------------------------------
เขตอำเภอจักราช 
เบาหวาน
 ความดัน

คำสั่งการเขียน SQL มีดังนี้
SELECT p.lname,COUNT(p.hn) as cc FROM clinicmember c
LEFT OUTER JOIN patient p on p.hn=c.hn
WHERE c.clinic = "003"
GROUP BY p.lname
ORDER BY cc DESC
limit 10

ลองไป RUN กันดูน่ะครับ
@keepper

Thursday, March 21, 2013

คำสั่ง SQL ให้คะแนนคนที่คุมเบาหวานความดันได้ดี 20 อันดับแรก /พี่เล็ก

นั่งงม SQL Code มา 4 ช.ม. สุดได้ก็ได้คำตอบตามนี้
โจทย์ก็คือ อยากที่จะให้คะแนน ผู้ป่วยเบาหวานในคลินิค อ่ะ ว่าในรอบ 3 เดือนที่ผ่านมา คุมความดันได้กี่ครั้ง คุมระดับน้ำตาลได้กี่ครั้ง เป็น Good visit กี่ครั้ง  
หลังจากพลัดผ่อนมานานจนถึง death line 2013-03-21 23.59 น.  

ได้คำสั้ง SQL ดังนี้
SELECT v.hn,v.vstdate,o.bps,o.bpd,o.fbs,f.dtx1,
sum(CASE WHEN o.bps BETWEEN "90" and "130" THEN 1 ELSE 0 END) AS bpsgood,
sum(CASE WHEN o.fbs BETWEEN "70" and "140" THEN 1 ELSE 0 END) AS fbsgood,
sum(CASE WHEN f.dtx1 BETWEEN "70" and "140" THEN 1 ELSE 0 END) AS dtxgood,
count(DISTINCT v.vn) as visitgood,
(sum(CASE WHEN o.bps BETWEEN "90" and "130" THEN 1 ELSE 0 END) +
sum(CASE WHEN o.fbs BETWEEN "70" and "140" THEN 1 ELSE 0 END) + 
sum(CASE WHEN f.dtx1 BETWEEN "70" and "140" THEN 1 ELSE 0 END) ) AS TOTAL
FROM vn_stat v
LEFT OUTER JOIN clinicmember c on c.hn=v.hn
LEFT OUTER JOIN person p on p.patient_hn=v.hn
LEFT OUTER JOIN opdscreen o on o.vn=v.vn
LEFT OUTER JOIN opdscreen_fbs f on f.vn=v.vn
WHERE v.vstdate BETWEEN "2013-01-01" and "2013-03-31" and c.clinic = "001"  
and c.clinic_member_status_id = "1" and c.discharge = "N"  and p.village_id <> "1" 
and (o.bmi <> "" or o.bmi is not NULL)
and o.bpd <> "0" and (o.fbs <> "0" or dtx1 <> "0")
GROUP BY v.hn
ORDER BY TOTAL DESC
LIMIT 20

ขอขอบคุณ คุณอภิศักดิ์ สำหรับคำแนะนำเรื่อง SQL Code 
#keepper


Tuesday, March 12, 2013

Review ทะเบียนคลินิค DM

     การติดตามทะเบียนคนไข้ในคลินิคให้เป็นปัจจุบันจะช่วยให้ เราทราบกลุ้มเป้าหมายที่เราให้การดูแล ว่าสถานะทางสุขภาพ เป็นอย่างไร มาเริ่มกันเลย
1. เขียนคำสั่ง SQL ดึงข้อมูลจากฐาน HOSxP ออกมาก่อนตามนี้

SELECT CONCAT(a.pname,a.fname,"  ",a.lname) as ptname,a.hn,a.cid,p.age_y,a.tmbpart,v.village_moo,a.informaddr,h.address,h.road,a.hometel,v.village_name,
s.clinic_member_status_name,n.vstdate,
sum(CASE WHEN n.vstdate BETWEEN "2013-02-01" and "2013-02-28" THEN 1 ELSE 0 END) AS good ,
SUM(case WHEN n.vstdate BETWEEN "2012-12-01" and "2013-03-10" THEN 1 ELSE 0 END) as cc
from clinicmember c
LEFT OUTER JOIN person p on c.hn=p.patient_hn  
LEFT OUTER JOIN patient a on a.hn=c.hn  
LEFT OUTER JOIN house h on h.house_id= p.house_id
LEFT OUTER JOIN village v on v.village_id=p.village_id
LEFT OUTER JOIN clinic_member_status s on s.clinic_member_status_id=c.clinic_member_status_id
LEFT OUTER JOIN vn_stat n on n.hn=c.hn  
WHERE c.clinic = "001"  and c.clinic_member_status_id in ("1")  and v.village_id <> "1"
GROUP BY a.hn ORDER BY cc DESC

2. ส่งออกข้อมูลไปยังโปรแกรม Excel
ต่อหน้า2 

Wednesday, March 6, 2013

จำนวนผู้สูงอายุที่มารับบริการผู้ป่วยในและผู้ป่วยนอก 2555 /น้องจะโอ

มีหนังสือจากสถาบันเวศศาสตร์ผู้สูงอายุ กรมการแพทย์ กระทรวงสาธารณะสุข เกี่ยวกับการศึกษาความพร้อมและความต้องการการสนับสนุนในการจัดบริการสุขภาพผู้สูงอายุของโรงพยาบาลในสังกัดกระทรวงสาธารณะสุข  

คำสั่ง SQL ที่ใช้นับผู้ป่วยใน มีดังนี้ 
SELECT COUNT(an) FROM an_stat
WHERE regdate BETWEEN "2012-01-01" and "2012-12-31" and age_y > "59"

ผู้ป่วยนอก 
SELECT COUNT(vn) from vn_stat
WHERE vstdate BETWEEN "2012-01-01" and "2012-12-31" and age_y > "59"





#keepper

Tuesday, February 19, 2013

ค้นคำว่า วงด่างขาว 3 ปีย้อนหลัง /พี่ทวีป


งานโรคติดต่อต้องการหาผู้ที่มีประวัติเสี่ยง ที่มาด้วยวงด่างขาว ก็คิดอยู่น่าว่าเอ้ ทำไงดี คงต้องใช้คำสั่ง like  %วงด่างขาว% เพื่อค้นคำนี้ในฐานข้อมูล และก็คิดอยู่ในใจนะว่า ถ้าเป็นสมัยก่อนที่เก็บข้อมูลบนกระดาษ พี่ทวีปคงต้องมาตั้งรื้อทุกแฟ้ม 5555+

ใช้เวลาไม่นากับคำสั้ง SQL นี้

SELECT o.* from opdscreen  o
LEFT OUTER JOIN person p on  o.hn=p.patient_hn
WHERE o.vstdate BETWEEN "2011-03-01" and "2013-03-31"
and o.hpi like "%ด่างขาว%"  and p.village_id <> "1"

#keepper

Monday, February 18, 2013

คำสั่ง SQL นับทะเบียนคลินิค NCD /พี่ไก่ สุมาลี

          ตามคำเรียกร้องให้ส่งข้อมูลทะเบียน การให้บริการที่โรงพยาบาล ศสช.จักราช และ รพ.สต ในเครือข่าย เมื่ออาทิตย์ที่แล้ว ก็ไม่ว่างที่จะทำข้อมูลให้สักที วันนี้ถึงว่างมานั่งคุยรายละเอียดกัน ฐานะ DATA Manager  ทำงานไม่ค่อยได้เรื่องเลยเนอะ

          วันนี้ Case Manager มานั่งคุย กับ DATA Manager ในเรื่องงาน NCD เพื่อดึงข้อลูลสัดส่วน การให้บริการระหว่างโรงพยาบาล และ ศสช.จักราช รพ.สต.ในเครือข่าย และเตรียมคำสั่งดึงรายงานความครอบคลุมผลการตรวจจอประสาทตา ครั้งที่ 1 ซึ่งการบันทึกข้อมูลลงฐานข้อมูลเกือบ 100 % แล้ว

         ปลายเดือนจะดึงข้อมูล ผลการตรวจให้ผู้รับผิดชอบงานนะครับ

#keepper

Note คำสั่ง SQL


SELECT c.* from clinicmember c
LEFT OUTER JOIN person p  on p.patient_hn=c.hn
LEFT OUTER JOIN patient t on t.hn=c.hn
WHERE c.clinic = "003" and c.clinic_member_status_id in ("1","2")  and c.hn not in (SELECT hn from clinicmember WHERE clinic = "001")
and c.regdate NOT BETWEEN "2012-10-01" and "2013-03-31"
and t.pttype in ("09","43","42","44","50","51","52","60","61","62","63","64","66","71","72","73","74","76","77","81","82","83","84","86","87","88","90","91")

คลินิค HT  สิทธิ UC  ตัดยอดลงทะเบียนใหม่  NOT BETWEEN "2012-10-01" and "2013-03-31"

Thursday, February 14, 2013

SQL นัด Clinic DM&HT มาตรวจ Lab ประจำปี


DM ในเขต 

SELECT o.nextdate,o.hn,CONCAT(p.pname,p.fname,"  ",p.lname) as ptname,o.note,o.app_user ,
v.village_id,v.village_moo,v.village_name
FROM oapp o
LEFT OUTER JOIN patient p on p.hn=o.hn
LEFT OUTER JOIN person s on s.patient_hn=o.hn
LEFT OUTER JOIN clinicmember c on c.hn=o.hn
LEFT OUTER JOIN village v on v.village_id=s.village_id
WHERE nextdate in ("2013-04-02","2013-04-09") and s.village_id <> "1" and c.clinic = "001"
ORDER BY o.nextdate,v.village_id


HT ในเขต

SELECT o.nextdate,o.hn,CONCAT(p.pname,p.fname,"  ",p.lname) as ptname,o.note,o.app_user ,
v.village_id,v.village_moo,v.village_name
FROM oapp o
LEFT OUTER JOIN patient p on p.hn=o.hn
LEFT OUTER JOIN person s on s.patient_hn=o.hn
LEFT OUTER JOIN clinicmember c on c.hn=o.hn
LEFT OUTER JOIN village v on v.village_id=s.village_id
WHERE nextdate in ("2013-04-23") and s.village_id <> "1" and c.clinic = "003"
ORDER BY o.nextdate,v.village_id

#keepper
 

Sample Text

111

Sample Text