วันอังคารที่ 28 กุมภาพันธ์ พ.ศ. 2560
การตั้งFONT ให้เอกสารในอนาคต
ท่านเคยไหมเวลาเราเปิดโปรแกรม MS word ขึ้นมาแล้วแทนที่เราจะได้พิมพ์เอกสารแล้วได้Fontที่ต้องการเลยกลับ ต้องไปแก้ไขตัวอักษรให้เป็นแบบที่เราต้องการอีกครั้ง
วันนี้เรามีวิธีการเซ็ตค่าให้font นั้นเป็นเอกสารเริ่มต้นตลอดกาลเลยมาดูวิธีกัน
1. เปิดโปรแกรมMS word ขึ้นมา แล้วทำการเลือกแบบและขนาดที่เราต้องการ ในที่นี้ผมเซ็ตค่าเป็น TH SarabunPSK ขนาด 16
2. กดปุ่มนี้ แล้วจะแสดงหน้าต่างให้เลือกแล้วเลือก ตั้งเป็นค่าเริ่มต้น
3. เลือกเอกสารทั้งหมดที่มีพื้นฐานบนแม่แบบปกติ... แล้วก็ ตกลงเลยครับ
4. จากนั้นเอกสารครั้งต่อไปจะเป็นfontที่้เราเลือกไว้แบบน่าอัศจรรย์เลยครับลองเปิดดูนะครับ
วันอังคารที่ 4 ตุลาคม พ.ศ. 2559
ประกาศแจ้งเตือนไวรัสเข้ารหัสตัวใหม่ร้ายกว่าเก่า
แรนซั่มแวร์ตัวใหม่ที่ชื่อ HDDCryptor นี้ ไม่เพียงล็อกข้อมูลบนเครื่องเท่านั้น แต่ยังเข้าไปจัดการกับข้อมูลที่แชร์กันบนเครือข่าย ไม่ว่าจะเป็นไดรฟ์, โฟลเดอร์, ไฟล์, ปริ๊นท์เตอร์ หรือการแชร์ผ่าน SMB อีกด้วย แม้จะมีรหัสผ่านในการเข้าถึงแล้วก็ตาม
ไวรัสนี้ติดต่อมาจากไฟล์ที่โหลดจากเว็บไซต์อันตราย หรือพ่วงมากับมัลแวร์อื่นๆ เมื่อติดตั้งในระบบจะปล่อยไฟล์อันตรายต่างๆ ลงในโฟลเดอร์รูท ซึ่งรวมถึงฟรีแวร์ที่ใช้กู้รหัสผ่านบนเครือข่าย (netpass.exe) ที่ถลุงรหัสจากเซสชั่นที่เปิดใช้อยู่ได้
นอกจากนี้ยังมีการสำรองแคชไฟล์บนเครือข่าย ทำให้มีข้อมูลอยู่แม้ขณะนั้นจะไม่ได้เชื่อมต่อกับไดรฟ์เครือข่ายนั้นๆ ทำให้พร้อมเข้ารหัสป่วนไฟล์แล้วนะกลับไปคัดลอกเมื่อเชื่อมต่อใหม่ได้ทันที
นอกจากจะใช้ฟรีแวร์ในการดูดรหัสผ่านแล้ว ยังมีใช้ฟรีแวร์ DiskCryptor ในการเข้ารหัสไฟล์อีกด้วย ซึ่งยูทิลิตี้ตัวนี้ยังสามารถแก้ไขข้อมูลส่วน Master Boot Record (MBR) เพื่อเปลี่ยนหน้าจอตอนเปิดเครื่องให้กลายเป็นจอดำมืดแห่งความตาย (Black Screen of Death : BkSoD) ที่ระบุรายละเอียดวิธีการชำระเงินค่าไถ่แทน
อ่านเพิ่มเติมที่นี่ – http://blog.trendmicro.com/trendlabs-security-intelligence/bksod-by-ransomware-hddcryptor-uses-commercial-tools-to-encrypt-network-shares-and-lock-hdds/
นอกจากนี้ยังมีการสำรองแคชไฟล์บนเครือข่าย ทำให้มีข้อมูลอยู่แม้ขณะนั้นจะไม่ได้เชื่อมต่อกับไดรฟ์เครือข่ายนั้นๆ ทำให้พร้อมเข้ารหัสป่วนไฟล์แล้วนะกลับไปคัดลอกเมื่อเชื่อมต่อใหม่ได้ทันที
นอกจากจะใช้ฟรีแวร์ในการดูดรหัสผ่านแล้ว ยังมีใช้ฟรีแวร์ DiskCryptor ในการเข้ารหัสไฟล์อีกด้วย ซึ่งยูทิลิตี้ตัวนี้ยังสามารถแก้ไขข้อมูลส่วน Master Boot Record (MBR) เพื่อเปลี่ยนหน้าจอตอนเปิดเครื่องให้กลายเป็นจอดำมืดแห่งความตาย (Black Screen of Death : BkSoD) ที่ระบุรายละเอียดวิธีการชำระเงินค่าไถ่แทน
อ่านเพิ่มเติมที่นี่ – http://blog.trendmicro.com/trendlabs-security-intelligence/bksod-by-ransomware-hddcryptor-uses-commercial-tools-to-encrypt-network-shares-and-lock-hdds/
วันจันทร์ที่ 22 สิงหาคม พ.ศ. 2559
การเก็บ logfile ของ apache แบบแบ่งเป็นรายวัน
apache accesslog,วิธีแก้ apache access มีขนาดใหญ่
กราบสวัสดีทุกท่าน ท่ามกลางกระแสการปรับเงินเดือนอันอึมครึม และสวัสดีมิตรรักแฟนเพลง ช่วงนี้ผมยังคงวนเวียนอยู่แถว apache webserver เพราะยังมีอะไรอีกหลายอย่างที่ยังเรียนรู้ไม่หมด คาดว่าคงเอามาเขียนเป็นบันทึกกันลืมได้อีกยาว วันนี้มาพูดกันถึงเรื่องของ logfile ครับ ใครที่ใช้ apache แล้วไม่ได้ไปแก้ค่าให้ตัว apache สร้าง logfile แบบวันต่อวันคงต้องปวดหัวเรื่อง accesslog ของเจ้าตัว apache อยู่ไม่น้อยเพราะมันจะมีขนาดใหญ่ขึ้นทุกวันจนต้องหาโปรแกรมที่สามารถเปิดดู log ขนาดใหญ่ได้ เช่น apachelogviewer ซึ่งจริงๆแล้วเราสามารถกำหนดให้ apache สร้าง logfile เป็นรายวันได้ด้วยการแก้ไขเพียงบรรทัดเดียวในไฟล์ httpd.conf ดังต่อไปนี้
1.ต้องมี rotatelogslogs ก่อน (ส่วนมากจะอยู่ใน bin แต่คาดว่าน่าจะมีทุกคน)
2.เปิดไฟล์ httpd.conf มาแล้วก็แก้
เป็น linux ก็
CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common //สร้าง logfile การใช้งาน 86400 วินาที (24 ชั่วโมง) CustomLog "|bin/rotatelogs -l /var/logs/logfile.%Y.%m.%d 86400" common //สร้าง logfile โดยเครื่องหมาย . ในที่นี้คือตัวคั่นระหว่างชื่อไฟล์เช่น logfile.2012.09.18 ก็จะได้ประมาณนี้ครับ CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common //อันนี้กำหนดขนาดของ logfile ไม่ให้เกิน 5 MErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" //อันนี้กำหนดขนาดของ logfile ไม่ให้เกิน 5 M พร้อมทั้งใส่ปีเดือนวันและเวลา
เป็น windows ก็
CustomLog "|bin/rotatelogs.exe logs/access.%y-%m-%d.log 86400" common //ก็จะได้เป็นชื่อไฟล์ เช่น access.2012-09-18.log
พอแก้เสร็จแล้วให้ save แล้ว restart service apache ครับ
*ข้อควรระวัง*
เวลาแก้ไขให้ใช้วิธีใส่เครื่องหมาย # ไว้หน้าคำสั่งเก่าเช่น เพื่อป้องกันความผิดพลาดหากเราเขียนเครื่องหมายผิดไป service apache มันจะไม่ยอม start ให้นะครับ
#CustomLog logs/access.log common Modify by champ 9:35 170955
CustomLog "|bin/rotatelogs.exe logs/access.%y-%m-%d.log 86400" common
ขอให้ภาระกิจลุล่วงครับ ^^
อ้างอิง
http://httpd.apache.org/docs/2.2/programs/rotatelogs.html
เครดิต http://share.psu.ac.th/blog/champy-it/25167
วันอังคารที่ 26 กรกฎาคม พ.ศ. 2559
เพิ่มวัคซีนJEเชื้อเป็น
1.เพิ่มข้อมูลที่ตารางperson_vaccine
2.เพิ่มข้อมูลตาราง epi_vaccine3.ทำให้วัคซีนรู้จักกันโดยเพิ่มที่ตาราง vaccine_combination
4.ส่งรหัสวัคชีนออก provis ทำให้รู้ว่าเราส่งออก43แฟ้มเป็นรหัสอะไร เพิ่มใน provis_vcctype
วันจันทร์ที่ 25 กรกฎาคม พ.ศ. 2559
SQL วันล่ะเล็กละน้อย
การมารับริการใน รพ
select s.vn,s.hn,s.vstdate,s.vsttime as "มา",s.service3,s.service4 as "ดึงมาซักประวัติ",s.service11 as "บันทึกซักประวัติเสร็จ",s.service5 as "เริ่มตรวจ",
s.service12 as "บันทึกตรวจเสร็จ",s.service6 as "บันทึกรายการยา MOD2",s.service7 as "ออกใบเสร็จรับเงิน" ,
sec_to_time(time_to_sec(service6)-time_to_sec(vsttime)) as total_time
from service_time s
where s.vstdate between "2016-01-01" and "2016-06-01"
and s.service3 is not null and s.service6 is not null
and s.service3 >= "08:00:00" and s.service3 <= "16:00:00"
and s.service6 > s.service3
and s.service6 > service5
order by s.vn
select s.vn,s.hn,s.vstdate,s.vsttime as "มา",s.service3,s.service4 as "ดึงมาซักประวัติ",s.service11 as "บันทึกซักประวัติเสร็จ",s.service5 as "เริ่มตรวจ",
s.service12 as "บันทึกตรวจเสร็จ",s.service6 as "บันทึกรายการยา MOD2",s.service7 as "ออกใบเสร็จรับเงิน" ,
sec_to_time(time_to_sec(service6)-time_to_sec(vsttime)) as total_time
from service_time s
where s.vstdate between "2016-01-01" and "2016-06-01"
and s.service3 is not null and s.service6 is not null
and s.service3 >= "08:00:00" and s.service3 <= "16:00:00"
and s.service6 > s.service3
and s.service6 > service5
order by s.vn
วันอังคารที่ 29 ธันวาคม พ.ศ. 2558
การเขียนรายงาน HOSxp เบื้องต้น ฉบับที่ 1
ไม่ว่าโปรแกรมอะไรที่มีการเขียนขึ้นมาใช้ ฟังก์ชันที่ขาดไม่ได้ในการทำงานคือ การออกรายงานวันนี้เรามาดูกันว่าการเขียนรายงานในHosxp ทำอย่างไรบ้าง ในที่นี้ขอข้ามการแนะนำโปรแกรมที่ใช้ออกแบบรายงาน มาเริ่มกันเลย
1. เข้าโปรแกรมออกรายงานซึ่งมีมาให้พร้อมกับการติดตั้งHoxp เปิดโปรแกรมขึ้นมาจะได้หน้าตาแบบนี้แล้วเลือก Custom Report
2. ในขั้นแรกให้เลือกรายงานมาสักตัวหนึ่งขึ้นมาก่อน แล้วกด ที่ปุ่มDesign เพื่อเข้าไปเปลี่ยนชื่อ รายงาน แล้วกดปิดรายงานนั้นออกไป
1. เข้าโปรแกรมออกรายงานซึ่งมีมาให้พร้อมกับการติดตั้งHoxp เปิดโปรแกรมขึ้นมาจะได้หน้าตาแบบนี้แล้วเลือก Custom Report
2. ในขั้นแรกให้เลือกรายงานมาสักตัวหนึ่งขึ้นมาก่อน แล้วกด ที่ปุ่มDesign เพื่อเข้าไปเปลี่ยนชื่อ รายงาน แล้วกดปิดรายงานนั้นออกไป
จะมีปุ่มSave Report ขึ้นมาให้ทำการเปลี่ยนชื่อรายงานเป็นอย่างอื่น แล้วกด Save Report ตัวอย่าง เปลี่ยนชื่อจาก CUSTOM- รายงาน สรุปค่ารักษาพยาบาลส่วนต่าง แยกตามสิทธิเกณฑ์คงค้าง และรายสิทธิ1 >>CUSTOM-รายงานผู้มารับบริการ ที่แผนกผู้ป่วยนอก แล้วบันทึก ระบบจะทำการสร้างรายงาน
ให้ใหม่โดยยังมีรายงานเดิมอยู่ เหมือนกับทำการคัดลอกรายงานในชื่อใหม่
3. ค้นหารายงานที่เราทำการเปลี่ยนชื่อไว้
กดNext
ให้ทำการวางScript หรือ SQL ที่ทำการQuery แล้วลงไปแทนอันเดิม แล้วให้ลากคลุม Parameterที่จะใช้ส่งค่า แล้วทำการกดปุ่ม + ด้านบน ถ้าส่งวันที่ไปเวลาเราเรียกใช้รายงานจะมีpop upให้เราเลือกวันที่ไปด้วย เช่น
เลือก NEXT จะได้ดังรูป คือระบบจะทำตามคำสั่งSQLที่เราวางไว้ก่อนหน้าแล้วแสดงข้อมูลขึ้นมา
แล้วกดปุ่ม Design แล้วทำการลบข้อมูลเก่าออกให้หมดจะได้หน้ารายงานว่างๆ
จากนั้นให้ทำการลากข้อมูลมาใส่ได้ตามอัธยาศัย ข้อมูลจะอยู่ที่ด้านขวามือ
ทำการpreview ดูก่อนได้แล้วทำการSaveเลย จบขั้นต้น
วันจันทร์ที่ 28 ธันวาคม พ.ศ. 2558
วันศุกร์ที่ 25 ธันวาคม พ.ศ. 2558
Select ข้อมูลให้มี 0ติดมาข้างหน้า เช่น 0000005
จากปัญหาที่เราไม่สามารถเลือกข้อมูลคนไข้ให้ครบ บางที่ใช้ 7 หลัก บางที่ใช้ 9 หลัก แต่บังเอิญทางที่ต้องส่งข้อมูลเขาต้องส่งข้อมูลเป็นเลข 9 หลัก โดยให้เติม 0 เข้าไปข้างหน้า เอาแล้วๆ ทำไงน้อ
ลองใช้คำสั่งดังต่อไปนี้ปัญหาจะหมดไป
LPAD(String,Lent,Place String)
string = ฟิวด์ข้อมูลที่เราเลือก
Lent = ขนาดของตัวเลขที่จะเติมให้เต็ม
Place String = ตัวอักขระที่จะเพิ่มเข้าไป
ลองใช้คำสั่งดังต่อไปนี้ปัญหาจะหมดไป
LPAD(String,Lent,Place String)
string = ฟิวด์ข้อมูลที่เราเลือก
Lent = ขนาดของตัวเลขที่จะเติมให้เต็ม
Place String = ตัวอักขระที่จะเพิ่มเข้าไป
วันพฤหัสบดีที่ 24 ธันวาคม พ.ศ. 2558
แก้ไขปัญหาพิมพ์ Discharge ผู้ป่วยในไม่ได้(Key violation)
วิธีแก้ไข
กรณีนี้เหมือนการที่เรา นำค่าว่างที่ไม่มีค่ามาคำนวณ โปรแกรมจึงไม่สามารถคำนวนได้ ถ้าติ๊กตรงนี้จะเหมือนนำข้อมูลมาคำนวณไม่ว่าจะมีค่าหรือไม่ หรือค่าว่างอาจมีการแปลงให้เป็น 0 เพื่อที่จะนำมาคำนวณเงินได้
ปัญหาการดึงคนไข้มาคีย์แล้วดึงไม่ได้
พี่: น้องไอทีพี่ดึงคนไข้มาแก้ไขมาเพิ่มไม่ได้ ดูให้หน่อย แต่ก่อนเคยคีย์ได้
ไอที: สักครู่ครับ
จากปัญหานี้เมื่อไปที่หน้าจอบันทึกของHOSXP จะมีปัญหา ผู้ใช้งานเปิดหน้าค้างไว้เช่น ER
แล้วผู้ป่วยมาตรวจรักษาโรคทั่วไปที่แผนกอื่น แล้วเจ้าหน้าที่จำทำการแก้ไขรายการในผู้ป่วยแผนกอื่น แต่จะทำการเลือกผ่านการคีย์HN จากหน้างานERเลย จะทำได้บ้างไม่ได้ เพราะผู้ป่วยบางคนไม่ได้มีการส่งต่อการรักษาไปที่แผนกนั้นๆจำเป็นต้องเลือก แสดงผู้ป่วยที่ส่งไปห้อง เป็น All หรือทั้งหมดจึงจะแสดงข้อมูลผู้ป่วยได้
จากนั้นให้พิมพ์HNลงไป จะทำการหาคนไข้ได้
เหตุผลที่ทำให้ไม่สามารถดึงคนไข้ได้ก็เพื่อจะทำให้ผุ้ตรวจรู้ว่าคนไข้อยู่สถานะอะไรอยู่ที่ห้องได๋ การตามหาคนไข้จะได้สะดวกยิ่งขึ้น เพราะต้องให้ผู้ตรวจส่งคนไข้เข้ามาก่อนนั้นเอง
วันจันทร์ที่ 21 ธันวาคม พ.ศ. 2558
ดึงข้อมูลผู้ป่วยคลีนิค ASHMA และCOPD
select t.addressid,if(c.clinic="015","โรคหอบหืด(Ashma)","โรคปอดอุดกั้นเรื้อรัง(COPD)") as clinicopd ,c.hn,CONCAT(pa.pname,pa.fname," ",pa.lname) as paName ,pa.hn,pa.addrpart,pa.moopart,t.full_name from clinicmember c
left OUTER JOIN patient pa ON c.hn=pa.hn
LEFT OUTER JOIN thaiaddress t ON CONCAT(pa.chwpart,pa.amppart,pa.tmbpart) =t.addressid
where c.clinic in("015","016") AND pa.tmbpart in("01","02","03","04","05")
left OUTER JOIN patient pa ON c.hn=pa.hn
LEFT OUTER JOIN thaiaddress t ON CONCAT(pa.chwpart,pa.amppart,pa.tmbpart) =t.addressid
where c.clinic in("015","016") AND pa.tmbpart in("01","02","03","04","05")
วันจันทร์ที่ 30 พฤศจิกายน พ.ศ. 2558
วันพุธที่ 4 พฤศจิกายน พ.ศ. 2558
sql เบาหวาน
==========DM ล้วน======
select dm_all.hn,pname,fname,lname,birthday,addrpart,moopart,tmbpart,amppart,chwpart from
(select pt.hn,pt.pname,pt.fname,pt.lname,pt.birthday,pt.addrpart,pt.moopart,pt.tmbpart,pt.amppart,pt.chwpart
from clinicmember c
left outer join patient pt on pt.hn=c.hn
where c.clinic="001" and pt.death<>"Y") as dm_all
left outer join (select hn from clinicmember where clinic="002")as ht on ht.hn=dm_all.hn
where ht.hn is null
=======DM+HT==
select dm_all.hn,pname,fname,lname,birthday,addrpart,moopart,tmbpart,amppart,chwpart from(
select pt.hn,pt.pname,pt.fname,pt.lname,pt.birthday,pt.addrpart,pt.moopart,pt.tmbpart,pt.amppart,pt.chwpart
from clinicmember c
left outer join patient pt on pt.hn=c.hn
where c.clinic="001" and pt.death<>"Y") as dm_all
inner join (select hn from clinicmember where clinic="002")as ht on ht.hn=dm_all.hn
=======กลุ่มโรคแทรกอื่นๆ==========
select distinct pt.hn from clinicmember c
left outer join patient pt on pt.hn=c.hn
left outer join ovstdiag d on c.hn=d.hn
where c.clinic="001" and pt.death<>"Y"
and (icd10="N189" or icd10="I259" or icd10="I48" or icd10="E113" or icd10="H360")
เอา กลุ่ม 1,2,3 มา join กับตัวนี้
==============HBA1C_2
SELECT
lh.hn,lo.lab_items_code,GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date)AS zz,
SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',1)AS A1C_1,
IF((1 + LENGTH(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date))-
LENGTH(REPLACE(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date), ',', '')))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',2),',',-1),'')AS A1C_2,
IF((1 + LENGTH(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date))-
LENGTH(REPLACE(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date), ',', '')))>2,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',3),',',-1),'')AS A1C_3,
IF((1 + LENGTH(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date))-
LENGTH(REPLACE(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date), ',', '')))>3,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',4),',',-1),'')AS A1C_4
FROM lab_head lh
LEFT OUTER JOIN lab_order lo ON lh.lab_order_number=lo.lab_order_number
WHERE lo.lab_items_code="193"
AND lh.hn IN(
SELECT pt.hn FROM clinicmember c
LEFT OUTER JOIN patient pt ON pt.hn=c.hn
WHERE c.clinic="001" AND pt.death<>"Y")
AND lh.order_date BETWEEN"2014-11-01"AND"2015-10-30"
AND lab_order_result <>""
GROUP BY lh.hn
===================
select dm_all.hn,pname,fname,lname,birthday,addrpart,moopart,tmbpart,amppart,chwpart from
(select pt.hn,pt.pname,pt.fname,pt.lname,pt.birthday,pt.addrpart,pt.moopart,pt.tmbpart,pt.amppart,pt.chwpart
from clinicmember c
left outer join patient pt on pt.hn=c.hn
where c.clinic="001" and pt.death<>"Y") as dm_all
left outer join (select hn from clinicmember where clinic="002")as ht on ht.hn=dm_all.hn
where ht.hn is null
=======DM+HT==
select dm_all.hn,pname,fname,lname,birthday,addrpart,moopart,tmbpart,amppart,chwpart from(
select pt.hn,pt.pname,pt.fname,pt.lname,pt.birthday,pt.addrpart,pt.moopart,pt.tmbpart,pt.amppart,pt.chwpart
from clinicmember c
left outer join patient pt on pt.hn=c.hn
where c.clinic="001" and pt.death<>"Y") as dm_all
inner join (select hn from clinicmember where clinic="002")as ht on ht.hn=dm_all.hn
=======กลุ่มโรคแทรกอื่นๆ==========
select distinct pt.hn from clinicmember c
left outer join patient pt on pt.hn=c.hn
left outer join ovstdiag d on c.hn=d.hn
where c.clinic="001" and pt.death<>"Y"
and (icd10="N189" or icd10="I259" or icd10="I48" or icd10="E113" or icd10="H360")
เอา กลุ่ม 1,2,3 มา join กับตัวนี้
==============HBA1C_2
SELECT
lh.hn,lo.lab_items_code,GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date)AS zz,
SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',1)AS A1C_1,
IF((1 + LENGTH(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date))-
LENGTH(REPLACE(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date), ',', '')))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',2),',',-1),'')AS A1C_2,
IF((1 + LENGTH(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date))-
LENGTH(REPLACE(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date), ',', '')))>2,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',3),',',-1),'')AS A1C_3,
IF((1 + LENGTH(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date))-
LENGTH(REPLACE(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date), ',', '')))>3,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(lo.lab_order_result ORDER BY lh.order_date),',',4),',',-1),'')AS A1C_4
FROM lab_head lh
LEFT OUTER JOIN lab_order lo ON lh.lab_order_number=lo.lab_order_number
WHERE lo.lab_items_code="193"
AND lh.hn IN(
SELECT pt.hn FROM clinicmember c
LEFT OUTER JOIN patient pt ON pt.hn=c.hn
WHERE c.clinic="001" AND pt.death<>"Y")
AND lh.order_date BETWEEN"2014-11-01"AND"2015-10-30"
AND lab_order_result <>""
GROUP BY lh.hn
===================
วันอังคารที่ 3 พฤศจิกายน พ.ศ. 2558
นับประชากรตามtype
SELECT
village.village_moo,
village.village_name,
sum(IF(person.house_regist_type_id=1,1,0)) as typearea1,
sum(IF(person.house_regist_type_id=2,1,0)) as typearea2,
sum(IF(person.house_regist_type_id=3,1,0)) as typearea3,
sum(IF(person.house_regist_type_id=4,1,0)) as typearea4
FROM
person
INNER JOIN village ON person.village_id = village.village_id
GROUP BY village.village_name
village.village_moo,
village.village_name,
sum(IF(person.house_regist_type_id=1,1,0)) as typearea1,
sum(IF(person.house_regist_type_id=2,1,0)) as typearea2,
sum(IF(person.house_regist_type_id=3,1,0)) as typearea3,
sum(IF(person.house_regist_type_id=4,1,0)) as typearea4
FROM
person
INNER JOIN village ON person.village_id = village.village_id
GROUP BY village.village_name
วันพฤหัสบดีที่ 29 ตุลาคม พ.ศ. 2558
10 อันดับโรคที่มีค่ารักาษาเยอะสุด hosxp
OPD
select a.pdx,count(a.pdx) as pdx_count ,i.name as icdname ,sum(income) as sum
from vn_stat a
left outer join icd101 i on i.code=a.main_pdx
where a.vstdate between '2014-10-01' and '2015-09-30'
and a.pdx<>'' and a.pdx is not null
group by a.pdx,i.name
order by sum(income) desc
limit 10
IPD
select pdx,name ,count(an),sum(income)/count(an),sum(income) as sumtotal
from an_stat a,icd101 i
where a.dchdate between '2014-10-01' and '2015-09-30'
and a.pdx = i.code
group by pdx
order by sumtotal desc
limit 10
select a.pdx,count(a.pdx) as pdx_count ,i.name as icdname ,sum(income) as sum
from vn_stat a
left outer join icd101 i on i.code=a.main_pdx
where a.vstdate between '2014-10-01' and '2015-09-30'
and a.pdx<>'' and a.pdx is not null
group by a.pdx,i.name
order by sum(income) desc
limit 10
IPD
select pdx,name ,count(an),sum(income)/count(an),sum(income) as sumtotal
from an_stat a,icd101 i
where a.dchdate between '2014-10-01' and '2015-09-30'
and a.pdx = i.code
group by pdx
order by sumtotal desc
limit 10
วันจันทร์ที่ 13 กรกฎาคม พ.ศ. 2558
วันพฤหัสบดีที่ 2 เมษายน พ.ศ. 2558
ย้ายข้อมูลลงฐานใหม่ SQL 2008
ทดสอบย้ายระบบและฐานข้อมูล ความเสี่ยง ไปเครื่องใหม ย้าย database sql server 2008 ตามขั้นตอนนี้
เพื่อความปลอดภัยให้ทำการCopy ฐานข้อมูลของเครื่องเก่าไว้ก่อน โดยไปที่ C:\Program Files\Microsoft SQL Server\MSSQL10.(ชื่อserver)\MSSQL\DATA แล้วไปcopy ฐานข้อมูลไว้ตามชื่อฐานข้อมูล copyไว้ทั้งสองไฟล์ (.ldf,.mdf)
ให้สร้าง User ใน sql server 2008 เครื่องใหม่ไว้ก่อน แล้วสร้าง database ตามชื่อที่ต้องการ Import เข้ามา(เครื่องใหม่)
*การสร้าง user ขึ้นมาใหม่ ให้ไปที่ Security –> Login –> คลิกขวา Add new login–> ตรง General ใส่ Username และ Password ให้ไปที่ Tab Server Role ต่อ แล้วให้ติ๊กถูกหมดทุกข้อ
ทำการ สร้างฐานข้อมูลในเครื่องใหม่ก่อนโดยใช้ชื่อฐานข้อมูลเดียวกันในที่นี้คือdbRisk
ไปที่ฐานข้อมูลเก่า dbRisk คลิกขวา –> tasks –> generate script –> เลือกฐานข้อมูล reservation_system ให้ติ๊กถูกช่อง script all object in the select all database –> ตรง Output ให้เลือก Script to new query window –> เมื่อเสร็จก็จะได้ Script ที่จะใช้สำหรับสร้างตารางและโครงสร้างต่างๆ
ไปที่ฐานข้อมูลใหม่ให้เปิดหน้า Script ขึ้นมา วางScript แล้วให้ทำการ Execute Script
ไปที่เครื่องใหม่ให้ ให้เปิดโปรแกรม Import and Export Data (64 bit) เมื่อเปิดโปรแกรมให้เลือกต้นทางที่จะทำการ Export –> เลือกปลายที่จะทำการ Import –> เลือก Copy Data From One Or More Table Or Views –> เลือก table ทั้งหมด กด Edit Mappings ส่วน Destination schema name เลือก dbo ติ๊กถูก (Delete rows in existing destination tables ข้อมูลฝั่งDesinationจะหาย) , Enable identity insert –> Run immediately กด Finish
เสร็จสิ้นในส่วนนำข้อมูลจาก SQL Server มาใช้สามารถเช็คฐานข้อมูลใหม่ดูในแต่ละตารางว่ามาครบหรือไม่
Credit : http://km.phuket.psu.ac.th/?p=483
วันอังคารที่ 10 กุมภาพันธ์ พ.ศ. 2558
sql ต่างๆ
เบาหวาน
select p.hn,p.cid as ID,concat(p.pname,p.fname)as Name, p.lname as Last_n,concat(DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),p.birthday)),"%Y")+0, " ปี") as age,p.sex,if(p.sex="1","ชาย","หญิง")as Sex, DATE_FORMAT(DATE_ADD(p.birthday, INTERVAL 543 YEAR),"%m/%d/%Y") as BirthD
from ovstdiag o
left join ovst ov on o.vn=ov.vn
left join opdscreen op on o.vn=op.vn
left join patient p on o.hn=p.hn
where o.icd10 in("E119","E113") and p.death<>"Y" and DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),p.birthday)),"%Y")+0 >="60" and p.sex ="2"
and p.moopart IN("01","1","02","2","03","3","04","4","05","5","06","6","07","7","10","11","12") and p.tmbpart in("02","2") and p.amppart ="16" and p.chwpart ="47"
group by o.hn
คำนวนหาอายุวันเดือนปี
select pt.birthday,curdate(),
timestampdiff(year,pt.birthday,curdate()) as age_y,
timestampdiff(month,pt.birthday,curdate())-(timestampdiff(year,pt.birthday,curdate())*12) as age_m,
timestampdiff(day,date_add(pt.birthday,interval (timestampdiff(month,pt.birthday,curdate())) month),curdate()) as age_d
from patient pt
where pt.hn='0051709'
นับผู้ป่วย7สีในคลินิกเบาหวาน คำนวนจากค่า fbs
SELECT COUNT(DISTINCT(opdscreen.hn)) FROM opdscreen
LEFT OUTER JOIN patient ON opdscreen.hn=patient.hn
Where (opdscreen.fbs BETWEEN '125' and '154')
and opdscreen.hn in(Select distinct(clinicmember.hn) from clinicmember where clinicmember.clinic='001' )
and opdscreen.vstdate between '2014-10-01' and '2014-10-31'
นับผู้ป่วย7สีในคลินิกเบาหวาน คำนวนจากค่า ความดัน
SELECT COUNT(DISTINCT(opdscreen.hn)) FROM opdscreen
LEFT OUTER JOIN patient ON opdscreen.hn=patient.hn
Where ((opdscreen.bps BETWEEN '110' and '120') and (opdscreen.bpd BETWEEN '60' and '89'))
and opdscreen.hn in(Select distinct(clinicmember.hn) from clinicmember where clinicmember.clinic='001' )
and opdscreen.vstdate between '2014-10-01' and '2014-10-31'
คัดกรองต้อกระจก 60 ปีขึ้นไป
select pt.hn,ov.vn,pt.pname,pt.fname,pt.lname,pt.birthday,pt.informaddr,ov.pdx,ov.dx_doctor,ov.dx0,ov.dx1,ov.age_y,ov.vstdate,pt.type_area
from vn_stat ov ,patient pt ,ovst ovst
where ov.vn=ovst.vn and pt.hn=ov.hn and ov.vstdate between "2014-10-01" and "2014-12-30" and ov.hn=pt.hn
and ov.age_y>= 60
and ov.age_y<= 200
and ( (ov.pdx >= "Z010" and ov.pdx <= "Z010")
or (ov.dx0 >= "H540" and ov.dx0 <= "H545")
)
ผู้ป่วย 60-69 ปี ชื่อที่อยู่ type 1,3
SELECT person.cid,person.pname,person.fname,person.lname,person.house_regist_type_id,person.birthdate,person.patient_hn,
person.age_y,person.discharge_date,sex.`name` AS sex,CONCAT(house.address,' หมู่ ',village.village_moo) AS BAN,thaiaddress.full_name
,person.death
FROM
person
INNER JOIN house ON person.house_id = house.house_id
INNER JOIN village ON person.village_id = village.village_id
INNER JOIN thaiaddress ON thaiaddress.addressid = village.address_id
INNER JOIN sex ON person.sex = sex.`code`
WHERE
person.age_y BETWEEN "60" AND "69" AND
person.death = "N" AND village.village_moo <> "0" AND
house_regist_type_id in("1","3") order by village.village_moo,person.age_y ASC
นับจำนวนประชากรแยก ช-ญ
SELECT t1.village_id,t1.village_name,t2.hh AS "ËÅѧ¤ÒàÃ×͹",
MAX(IF(sex='1',cc,NULL))AS "ªÒÂ",
MAX(IF(sex='2',cc,NULL))AS "ËÔ§"
FROM(
SELECT p.village_id,v.village_name,COUNT(sex)AS cc,sex FROM person p
LEFT OUTER JOIN village v ON v.village_id=p.village_id
WHERE p.house_regist_type_id IN('1','3')AND p.village_id<>'99'AND p.person_discharge_id='9'
GROUP BY p.sex, p.village_id )AS t1
INNER JOIN (SELECT h.village_id,COUNT(address)AS hh FROM house h
LEFT OUTER JOIN village v ON v.village_id=h.village_id
WHERE h.village_id <>'99'
GROUP BY h.village_id)AS t2 ON t2.village_id=t1.village_id
GROUP BY village_id
select p.hn,p.cid as ID,concat(p.pname,p.fname)as Name, p.lname as Last_n,concat(DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),p.birthday)),"%Y")+0, " ปี") as age,p.sex,if(p.sex="1","ชาย","หญิง")as Sex, DATE_FORMAT(DATE_ADD(p.birthday, INTERVAL 543 YEAR),"%m/%d/%Y") as BirthD
from ovstdiag o
left join ovst ov on o.vn=ov.vn
left join opdscreen op on o.vn=op.vn
left join patient p on o.hn=p.hn
where o.icd10 in("E119","E113") and p.death<>"Y" and DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),p.birthday)),"%Y")+0 >="60" and p.sex ="2"
and p.moopart IN("01","1","02","2","03","3","04","4","05","5","06","6","07","7","10","11","12") and p.tmbpart in("02","2") and p.amppart ="16" and p.chwpart ="47"
group by o.hn
คำนวนหาอายุวันเดือนปี
select pt.birthday,curdate(),
timestampdiff(year,pt.birthday,curdate()) as age_y,
timestampdiff(month,pt.birthday,curdate())-(timestampdiff(year,pt.birthday,curdate())*12) as age_m,
timestampdiff(day,date_add(pt.birthday,interval (timestampdiff(month,pt.birthday,curdate())) month),curdate()) as age_d
from patient pt
where pt.hn='0051709'
นับผู้ป่วย7สีในคลินิกเบาหวาน คำนวนจากค่า fbs
SELECT COUNT(DISTINCT(opdscreen.hn)) FROM opdscreen
LEFT OUTER JOIN patient ON opdscreen.hn=patient.hn
Where (opdscreen.fbs BETWEEN '125' and '154')
and opdscreen.hn in(Select distinct(clinicmember.hn) from clinicmember where clinicmember.clinic='001' )
and opdscreen.vstdate between '2014-10-01' and '2014-10-31'
นับผู้ป่วย7สีในคลินิกเบาหวาน คำนวนจากค่า ความดัน
SELECT COUNT(DISTINCT(opdscreen.hn)) FROM opdscreen
LEFT OUTER JOIN patient ON opdscreen.hn=patient.hn
Where ((opdscreen.bps BETWEEN '110' and '120') and (opdscreen.bpd BETWEEN '60' and '89'))
and opdscreen.hn in(Select distinct(clinicmember.hn) from clinicmember where clinicmember.clinic='001' )
and opdscreen.vstdate between '2014-10-01' and '2014-10-31'
คัดกรองต้อกระจก 60 ปีขึ้นไป
select pt.hn,ov.vn,pt.pname,pt.fname,pt.lname,pt.birthday,pt.informaddr,ov.pdx,ov.dx_doctor,ov.dx0,ov.dx1,ov.age_y,ov.vstdate,pt.type_area
from vn_stat ov ,patient pt ,ovst ovst
where ov.vn=ovst.vn and pt.hn=ov.hn and ov.vstdate between "2014-10-01" and "2014-12-30" and ov.hn=pt.hn
and ov.age_y>= 60
and ov.age_y<= 200
and ( (ov.pdx >= "Z010" and ov.pdx <= "Z010")
or (ov.dx0 >= "H540" and ov.dx0 <= "H545")
)
ผู้ป่วย 60-69 ปี ชื่อที่อยู่ type 1,3
SELECT person.cid,person.pname,person.fname,person.lname,person.house_regist_type_id,person.birthdate,person.patient_hn,
person.age_y,person.discharge_date,sex.`name` AS sex,CONCAT(house.address,' หมู่ ',village.village_moo) AS BAN,thaiaddress.full_name
,person.death
FROM
person
INNER JOIN house ON person.house_id = house.house_id
INNER JOIN village ON person.village_id = village.village_id
INNER JOIN thaiaddress ON thaiaddress.addressid = village.address_id
INNER JOIN sex ON person.sex = sex.`code`
WHERE
person.age_y BETWEEN "60" AND "69" AND
person.death = "N" AND village.village_moo <> "0" AND
house_regist_type_id in("1","3") order by village.village_moo,person.age_y ASC
นับจำนวนประชากรแยก ช-ญ
SELECT t1.village_id,t1.village_name,t2.hh AS "ËÅѧ¤ÒàÃ×͹",
MAX(IF(sex='1',cc,NULL))AS "ªÒÂ",
MAX(IF(sex='2',cc,NULL))AS "ËÔ§"
FROM(
SELECT p.village_id,v.village_name,COUNT(sex)AS cc,sex FROM person p
LEFT OUTER JOIN village v ON v.village_id=p.village_id
WHERE p.house_regist_type_id IN('1','3')AND p.village_id<>'99'AND p.person_discharge_id='9'
GROUP BY p.sex, p.village_id )AS t1
INNER JOIN (SELECT h.village_id,COUNT(address)AS hh FROM house h
LEFT OUTER JOIN village v ON v.village_id=h.village_id
WHERE h.village_id <>'99'
GROUP BY h.village_id)AS t2 ON t2.village_id=t1.village_id
GROUP BY village_id
สมัครสมาชิก:
บทความ (Atom)
































