วันจันทร์, สิงหาคม 29, 2548

เรื่องของ SQL ตอนที่ 2

ตอนที่แล้วเขียนเรื่องเกี่ยวกับ SQL ไปตอนหนึ่งรู้สึกว่า เริ่มมันส์ในอารมณ์ เกิดความกระเหี้ยนกระหืออยากจะเขียนอีก ว่าแล้วก็สนองตัณหาของตัวเองอีกเป็นไรมี ใครคงจะไม่นินทา (ให้ได้ยิน) เป็นแน่แท้ ไหนๆ ก็อยู่กับเรื่อง Sub Query แล้วก็เขียนต่ออีกซะเลย เอาเรื่องเบาหวานนี่แหละ คนอ่านจะได้ต่อเนื่องไม่ต้องเสียเวลาลำดับความคิด ย้อนไปย้อนมา ให้ปวดหมอง


ก่อนที่จะมาเป็น SQL ในตอนที่แล้วเคยได้รับโจทย์จากบรรดาเจ้านาย ที่น่ารักทั้งหลาย เกี่ยวกับคนไข้เบาหวานนี่แหละว่า อยากจะได้รายชื่อคนไข้เบาหวาน ที่อยู่ อายุ และรายละเอียดอีกหลายอย่าง แล้วกำชับด้วยนะว่าเอารหัสออกมาให้ดูด้วย (คงประมาณว่าอยากจะรู้ว่าเรา SELECT มั่วมั่งอะป่าว) ก็ได้สิ จะไปยากอะไรกัน แถมรหัสการวินิจฉัยให้ด้วยก็ยังไหว

นี่เลย SQL โชว์ให้ดู เป็น SQL ชุดที่หนึ่งแล้วกัน

SELECT
SUBSTRING(t_visit.visit_financial_discharge_time,0,11) AS DATE
,t_patient.patient_hn AS hn
,pat_address.patient_name AS name
,pat_address.address AS address
,t_patient.patient_pid AS pid
,t_diag_icd10.diag_icd10_number AS icd10
,t_diag_icd10.f_diag_icd10_type_id AS diag_type
FROM
t_patient,pat_address,t_visit,t_diag_icd10
WHERE
t_patient.patient_hn = t_visit.visit_hn
AND t_patient.patient_hn = pat_address.patient_hn
AND t_visit.t_visit_id = t_diag_icd10.diag_icd10_vn
AND t_visit.f_visit_type_id='0'
AND t_visit.f_visit_status_id='3'
AND (t_diag_icd10.diag_icd10_number LIKE 'E10%'
OR t_diag_icd10.diag_icd10_number LIKE 'E11%'
OR t_diag_icd10.diag_icd10_number LIKE 'E14%'
OR t_diag_icd10.diag_icd10_number LIKE 'E15%')
AND (SUBSTRING(t_visit.visit_financial_discharge_time from 1 for 10) between '2548-07-01' and '2548-07-31')
GROUP BY
t_visit.visit_financial_discharge_time
,hn
,pat_address.patient_name
,pat_address.address
,t_patient.patient_pid
,t_diag_icd10.diag_icd10_number
,t_diag_icd10.f_diag_icd10_type_id
ORDER BY hn
หรือจะเขียนอีกแบบหนึ่งก็ได้ดังนี้ ตั้งชื่อว่าเป็น SQL ชุดที่สอง

SELECT
SUBSTRING(v.visit_financial_discharge_time,0,11) AS DATE
,t.patient_hn AS hn
,p.patient_name AS name
,p.address AS address
,t.patient_pid AS pid
,d.diag_icd10_number AS icd10
,d.f_diag_icd10_type_id AS diag_type
FROM
t_patient t,pat_address p ,t_visit v,t_diag_icd10 d
WHERE
t.patient_hn = v.visit_hn
AND t.patient_hn = p.patient_hn
AND v.t_visit_id = d.diag_icd10_vn
AND v.f_visit_type_id='0'
AND v.f_visit_status_id='3'
AND (d.diag_icd10_number LIKE 'E10%'
OR d.diag_icd10_number LIKE 'E11%'
OR d.diag_icd10_number LIKE 'E14%'
OR d.diag_icd10_number LIKE 'E15%')
AND (SUBSTRING(v.visit_financial_discharge_time from 1 for 10) between '2548-07-01' and '2548-07-31')
GROUP BY
v.visit_financial_discharge_time
,hn
,p.patient_name
,p.address
,t.patient_pid
,d.diag_icd10_number
,d.f_diag_icd10_type_id
ORDER BY hn

สังเกตุที่ตัวสีแดงใน SQL ชุุดที่สองนะครับ ทำไมต้องมี ตัวอักษรตามหลังตารางด้วย อย่างเช่น t_patient ตามด้วย t , pat_address ตามด้วย p ขอเฉลยตรงนี้ครับว่าตัวอักษรที่ตามหลังชื่อตารางคือ alias (ประมาณว่าเป็นชื่อเล่นของตาราง) การกำหนดเราสามารถกำหนดได้ตามใจชอบจะเป็นตัวอักษรหรือคำอะไรก้ได้แต่ไม่น่าจะซ้ำกัน มีประโยชน์ตรงที่เราสามารถจะอ้างอิงใช้ชื่อ alias แทนชื่อของตารางได้เวลาที่เรา จะ SELECT หรืออ้างถึงชื่อตารางเราก็สามารถจะใช้ชื่อ alias แทนได้ เช่นถ้าเราจะพิมพ์ว่า t_patient.hn เราก็อาจจะย่อเป็น t.hn ก็ได้ช่วยลดเวลาการพิมพ์ลงไปได้สำหรับผู้ที่พิมพ์ไม่ค่อยคล่องนัก แต่ก็มีผลเหมือนกันนะครับ อันนี้แล้วแต่ความสะดวกของคนพิมพ์ กับความชอบส่วนตัว ของใครของมัน เอาล่ะ มาต่อกันได้แล้ว ไม่ว่าจะรันด้วย SQL ชุดที่หนึ่งหรือว่าชุดที่สอง ก็จะได้ผลลัพท์ดังนี้

2548-07-01 000000435 นางศรี อินปุ๊ด 42 ม.05 ต.วอแก้ว อ.ห้างฉัตร จ.ลำปาง 3510500027099 E11.9 1
2548-07-02 000020659 นางตา อุดก้อน 26/1 ม.07 ต.ตะเคียนปม อ.ทุ่งหัวช้าง จ.ลำพูน 3510500009147 E11 1
2548-07-04 000021908 นางบุญทอน สีสิงห์ 88 ม.07 ต.ตะเคียนปม อ.ทุ่งหัวช้าง จ.ลำพูน 3510500012601 E10.9 1
2548-07-04 000009510 นายจันทร์แก้ว นกแดง 18/1 ม.9 ต.ตะเคียนปม อ.ทุ่งหัวช้าง จ.ลำพูน 3510500057109 E10 1
2548-07-04 000013471 นายสุข ปุ๊ดแค 38/1 ม.09 ต.ตะเคียนปม อ.ทุ่งหัวช้าง จ.ลำพูน 3510500059349 E11 1
2548-07-06 000019694 นางแว่น เปี้ยยะ 48 ม.08 ต.บ้านปวง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500079676 E11 1
2548-07-06 000019663 นางบุญเย็น อินมณี 2/1 ม.07 ต.บ้านปวง อ.ทุ่งหัวช้าง จ.ลำพูน E11 1
2548-07-06 000012629 นางศรีออน อินมณี 60 ม.08 ต.บ้านปวง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500080143 E11 2
2548-07-06 000006196 นางบัวคำ มีจี๋ 57 ม.09 ต.บ้านปวง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500158291 E11.4 1
2548-07-07 000009510 นายจันทร์แก้ว นกแดง 18/1 ม.9 ต.ตะเคียนปม อ.ทุ่งหัวช้าง จ.ลำพูน 3510500057109 E11 1
2548-07-07 000000083 นางจันทร์เป็ง ใฝนันตา 50 ม.08 ต.ทุ่งหัวช้าง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500020779 E11 1
2548-07-07 000024066 นางฟอง ป้อจุมปู 38/1 ม.02 ต.*บ้านไผ่ อ.ลี้ จ.ลำพูน E11 1
2548-07-07 000000284 นางหน้อย ขัดสาร 59 ม.08 ต.ทุ่งหัวช้าง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500039038 E11 1
2548-07-07 000000038 นางสุข เปอร์เขียว 165 ม.06 ต.ทุ่งหัวช้าง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500152675 E11 1
2548-07-07 000001082 นางแก้วลูน อินปุ๊ด 83 ม.06 ต.ทุ่งหัวช้าง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500152721 E11 1
2548-07-07 000000959 นายอดุลย์ อุตชมภู 195 ม.03 ต.ทุ่งหัวช้าง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500025754 E11 1
2548-07-07 000000435 นางศรี อินปุ๊ด 42 ม.05 ต.วอแก้ว อ.ห้างฉัตร จ.ลำปาง 3510500027099 E11 1
2548-07-07 000002336 นางวิไลวรรณ ทองขาว 12/3 ม.15 ต.แม่ตืน อ.ลี้ จ.ลำพูน 3510400354667 E10 1
2548-07-07 000000050 นางสี สุขเรือง 63 ม.01 ต.ทุ่งหัวช้าง อ.ทุ่งหัวช้าง จ.ลำพูน 3510500101965 E11 1
2548-07-07 000018300 นางแพรวพรรณ ฤทัยธรรม 1979 ม. ต.บางจาก อ.พระโขนง จ.กรุงเทพฯ 3100905452325 E11 4
2548-07-07 000006051 นายอัมรินทร์ เชียงคำ 70 ม.04 ต.ตะเคียนปม อ.ทุ่งหัวช้าง จ.ลำพูน 3510500039283 E10 4
2548-07-07 000002453 นางทองพูน ทองขาว 242/1 ม.15 ต.แม่ตืน อ.ลี้ จ.ลำพูน 3510400354772 E11 1


ก็ต้องอภัยสำหรับผู้ป่วยทุกท่านที่บังอาจนำเอาความลับส่วนตัวของท่านมาเผยแพร่ ขอเรียนว่ามิได้มีเจตนาเป็นอย่างอื่นนอกเหนือจากการศึกษา ได้ผลมาแล้วครับ ไม่ยากส์ คิดว่าจบหรือยังล่ะครับ มองเห็นอะไรที่มันทะแม่งๆ หรือปล่าว


ตอนแรกพอผมคิวรี่ได้ปุ๊บก็ส่งผลให้คนที่มาขอไปเลย ไม่ได้คิดอะไร อีกสักพักแกกลับมาครับ หน้างี้บอกว่าใช่เลย คือแกสงสัยว่าคนไข้บางคนรหัสการให้การวินิจฉัยทำไมเป็น 4 (other) บ้าง 2 (Comorbidity) บ้าง ทำไมไม่เป็นหนึ่งเหมือนกันทั้งหมด แล้วคนที่มีรหัสวินิจฉัยเป็นอย่างอื่นนอกจาก 1 (Primary Diagnosis) เนี่ยจะรู้ได้หรือปล่าวว่ามี รหัสโรคอะไรเป็นโรคร่วมได้อีก เอาออกมาให้หมดได้มั๊ย แล้วก็โยนผลการคิวรี่กลับมาให้ผมอย่างแรง ผมไม่ทันจะอธิบายอะไร แกก็ไปเสียแล้ว ทิ้งปริศนาให้ผมขบคิด ก็จริงอย่างที่แกว่า เรามานึกดูเงื่อนไขก็ไม่น่าจะผิดอะไร ก็ SELECT รหัส ICD10 ที่บ่งชี้ว่าเป็นโรคเบาหวานออกมาให้แล้วงัย มานั่งนึกดูอีกทีว่าเราลืมอะไรไปหรือปล่าว


ลืมจริงๆ ครับ ลืมนึกไปว่าก็เรา SELECT ออกมาเฉพาะรหัสโรคทีประกอบด้วย E10 E11 E14 E 15 แต่ผู้ป่วยน่ะไม่จำเป็นว่าเวลามารับการรักษาจะได้รหัสโรคอันเดียวนี่ อาจจะมีโรคร่วมด้วย เช่นปวดเมื่อยกล้ามเนื้อซึ่งเป็นอาการเด่นในการมารับบริการครั้งนั้นก็ได้ ซึ่งรหัสโรคอาจจะมีเท่ากับหนึ่งหรือมากกว่าก็ได้ใช่ป่าว แต่จะทำอย่างไรถึงจะ SELECT ออกมาได้ทั้งหมดและมีรหัสของโรคเบาหวานออกมาด้วย ทำอย่างไรล่ะ (โ.....๊ย)


ใช้หมองหน่อย เป็นอิ๊กคิวซํงอยู่สองสามวันได้ พบว่า

ก็จบไปสำหรับเรื่องราวมหาวิบาก ที่ได้ประสบพบพาน เอามาเล่าสู่กันฟัง ผมเองถูกมองว่าเป็นเซียนบ้างล่ะ ผู้เชี่ยวชาญบ้างล่ะ แต่ความจริงไม่ใช่ ก็เป็นยูสเซอร์ธรรมดาเหมือนๆกับท่านทั้งหลายแหละครับ ยังมีคนที่เก่งกว่าผมอีกมากนัก อาศัยลูกตื้อ อ่านให้มาก ทำให้เยอะ ลองผิดบ้างถูกบ้าง พอเราเริ่มเข้าใจแล้ว มันก็จะทำให้เราหาทางแก้ปัญหาที่เข้ามาได้เร็วขึ้น เนียนขึ้น อย่าพึ่งยอมแพ้ อาจจะต้องหาเวลาส่วนตัวให้มากขึ้นกว่าเดิม ของอย่างนี้ต้องใช้เวลาบ้างนะครับ ต้องยอมนอนดึกกว่าปกติ เล่นเกมส์ที่ชอบน้อยลง คุยโทรศัพท์กับกิ๊กน้อยลง แล้วความสำเร็จก็จะเป็นของเรา ขอให้กำลังใจกับทุกท่านครับ เราทำเองเราได้เอง โปรดติดตามตอนต่อไปนะครับ น่าสนใจทีเดียวแหละ เป็นเรื่องราวของ น้องจอย (JOIN) เกริ่นให้ฟังยั่วน้ำลายเล่นๆ ไปก่อน





แหล่งความรู้และอ้างอิง



BUY CHEAP CIALIS
BUY CHEAP CIALIS & VIAGRA ONLINE.SPECIAL BONUS
BUY LOW-COST VIAGRA ! HALF-PRICE CIALIS ! CHEAP LEVITRA !
DISCOUNT CHEAP VIAGRA.DYSFUNCTION ERECTILE NEW MEDS
ACNE MEDICINE ONLINE
buy acutane
WHAT IS ANTHELMINTICS
BUY ALBENZA ONLINE
ANTIBACTERIAL MEDICINE & CARE
buy amoxil low-cost
AMPICILLIN ONLINE
AMPICILLIN
BUY CHEAP BACTRIM
backtrim
NEW DRUGS & PILLS… SUPER-VIAGRA…
BUY CIALIS
BUY CIPRO ONLINE
BUY CIPRO ONLINE
BUY CHEAP DIFLUCAN ONLINE
LOW-PRICES DIFLUCAN ONLINE
BUY CHEAP SUPER VIAGRA ONLINE AND SAVE 70 % OF MONEY...
ORDER CHEAP CIALIS ONLINE
APPLY YOUR CREDIT CARD and SAVE 70 %  


แสดงความคิดเห็น
Powered for by Blogger Templates free hit counter code
Copyright ? 2008-2009 Uthai Lueadnakrop. All Rights reserved