กระทู้เก่าบอร์ด อ.Yeadram
1,277 7
URL.หัวข้อ /
URL
ต้องการหาช่วงเวลาที่ union กัน
ขอความช่วยเหลือด้วยนะคะ
ดิฉันมีฐานข้อมูลการใช้ยาของผป ใน รพ. เช่น ผป.คนหนึ่ง “154” ตามตาราง
ข้างล่าง ซึ่งในแต่ละปี ผป คนนี้จะมาหาหลาย clinic บางครั้งก็วันเดียวกัน บาง
ครั้งก็ต่างวันกัน เมื่อรวมกับผป.คนอื่นๆ จะมี rec ประมาณ 700,000 rec/ปี
B_Date PT_NO Drug Amt Use Day E_date
1/1/2554 154 A 180 1x3 60 1/3/2554
1/1/2554 154 B 30 กินเวลาปวด X X
1/1/2554 154 C 90 1X2 60 1/3/2554
2/2/2554 154 Z 20 1x1 20 22/2/2554
ปัญหาของดิฉันคือ หากมีการสั่งยา Z ให้ผป 154 ยา Z จะตีกันกับยา A และ
B จนทำให้ผป.เสียชีวิตได้
ดิฉันต้องการหาข้อมูล การสั่งยาที่ตี เช่น ใส่ criteria ที่ Drug = Z or A or B
อยากได้รายงานว่า
Drug E กับ A ใช้ร่วมกัน ตั้งแต่ 2/2/2554 – 22/2/2554 20 วัน
Drug E กับ B ใช้ร่วมกัน XXXXX เนื่องจากไม่สามารถหา E_date ได้
ซึ่งต้องไปดูรายละเอียดเอง
B_Date PT_NO Drug Amt Use Day E_date
วันเริ่มยา ผป ยา จน.ยา วิธีใช้ จน.วันที่ใช้ วันที่ยาหมด
ขอบพระคุณคะ
ดิฉันมีฐานข้อมูลการใช้ยาของผป ใน รพ. เช่น ผป.คนหนึ่ง “154” ตามตาราง
ข้างล่าง ซึ่งในแต่ละปี ผป คนนี้จะมาหาหลาย clinic บางครั้งก็วันเดียวกัน บาง
ครั้งก็ต่างวันกัน เมื่อรวมกับผป.คนอื่นๆ จะมี rec ประมาณ 700,000 rec/ปี
B_Date PT_NO Drug Amt Use Day E_date
1/1/2554 154 A 180 1x3 60 1/3/2554
1/1/2554 154 B 30 กินเวลาปวด X X
1/1/2554 154 C 90 1X2 60 1/3/2554
2/2/2554 154 Z 20 1x1 20 22/2/2554
ปัญหาของดิฉันคือ หากมีการสั่งยา Z ให้ผป 154 ยา Z จะตีกันกับยา A และ
B จนทำให้ผป.เสียชีวิตได้
ดิฉันต้องการหาข้อมูล การสั่งยาที่ตี เช่น ใส่ criteria ที่ Drug = Z or A or B
อยากได้รายงานว่า
Drug E กับ A ใช้ร่วมกัน ตั้งแต่ 2/2/2554 – 22/2/2554 20 วัน
Drug E กับ B ใช้ร่วมกัน XXXXX เนื่องจากไม่สามารถหา E_date ได้
ซึ่งต้องไปดูรายละเอียดเอง
B_Date PT_NO Drug Amt Use Day E_date
วันเริ่มยา ผป ยา จน.ยา วิธีใช้ จน.วันที่ใช้ วันที่ยาหมด
ขอบพระคุณคะ
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R12852
ที่พอจะคิดคำสั่ง SQL ออก ต้องมีการปรับปรุงต่อไปนี้เพื่อให้สะดวก
1. ฟิลด์ B_Date และ E_Date ต้องมี data type เป็น Date/Time (ผมไม่แน่ใจว่าคุณเก็บเป็น Text หรือเปล่า แต่ถ้าใช่ มันจะยิ่งยุ่งยาก คุณต้องไปปรับปรุงเงื่อนไขใน SQL เอาเอง)
2. E_Date ที่ไม่รู้วันสิ้นสุด ต้องเก็บเป็นวันที่ที่มากๆไปเลย เช่น 31/12/2600
3. ต้องมีเทเบิล DX เพื่อเก็บว่า ยาไหนตีกับยาไหน โดยมี 2 ฟิลด์คือ X1 และ X2 ดังนั้นจึงไม่รองรับการกินยาที่จะเกิดพิษเมื่อกินตั้งแต่ 3 ตัวหรือมากกว่า และป้อนเฉพาะ A กับ Z ก็พอ ไม่ต้องป้อน Z กับ A อีกด้วย
4. สมมุติว่าเทเบิลการให้ยาที่บอกมา มีชื่อว่า DP มีฟิลด์ D=ยา, B=B_Date, E=E_Date
SQL ก็จะเป็นลักษณะนี้
SELECT DP1.*, DP2.*
FROM (DP AS DP1 INNER JOIN DX ON DP1.D = DX.X1) INNER JOIN DP AS DP2 ON DX.X2 = DP2.D
WHERE (DP1.B BETWEEN DP2.B AND DP2.E)
OR (DP1.E BETWEEN DP2.B AND DP2.E)
OR (DP2.B BETWEEN DP1.B AND DP1.E)
OR (DP2.E BETWEEN DP1.B AND DP1.E)
คุณก็เอา SQL นี้ไปต่อยอดอีกทีแล้วกันครับ
หมายเหตุ : เนื่องจากเป็นงานที่เกี่ยวข้องกับชีวิตผู้ป่วย ผมไม่ขอรับผิดชอบใดๆต่อความผิดพลาดที่อาจเกิดขึ้นได้จากคำตอบของผม คุณต้องไปทดสอบและตรวจสอบว่าข้อมูลนั้นแสดงออกมาได้ถูกต้องหรือไม่เอาเองนะครับ
1. ฟิลด์ B_Date และ E_Date ต้องมี data type เป็น Date/Time (ผมไม่แน่ใจว่าคุณเก็บเป็น Text หรือเปล่า แต่ถ้าใช่ มันจะยิ่งยุ่งยาก คุณต้องไปปรับปรุงเงื่อนไขใน SQL เอาเอง)
2. E_Date ที่ไม่รู้วันสิ้นสุด ต้องเก็บเป็นวันที่ที่มากๆไปเลย เช่น 31/12/2600
3. ต้องมีเทเบิล DX เพื่อเก็บว่า ยาไหนตีกับยาไหน โดยมี 2 ฟิลด์คือ X1 และ X2 ดังนั้นจึงไม่รองรับการกินยาที่จะเกิดพิษเมื่อกินตั้งแต่ 3 ตัวหรือมากกว่า และป้อนเฉพาะ A กับ Z ก็พอ ไม่ต้องป้อน Z กับ A อีกด้วย
4. สมมุติว่าเทเบิลการให้ยาที่บอกมา มีชื่อว่า DP มีฟิลด์ D=ยา, B=B_Date, E=E_Date
SQL ก็จะเป็นลักษณะนี้
SELECT DP1.*, DP2.*
FROM (DP AS DP1 INNER JOIN DX ON DP1.D = DX.X1) INNER JOIN DP AS DP2 ON DX.X2 = DP2.D
WHERE (DP1.B BETWEEN DP2.B AND DP2.E)
OR (DP1.E BETWEEN DP2.B AND DP2.E)
OR (DP2.B BETWEEN DP1.B AND DP1.E)
OR (DP2.E BETWEEN DP1.B AND DP1.E)
คุณก็เอา SQL นี้ไปต่อยอดอีกทีแล้วกันครับ
หมายเหตุ : เนื่องจากเป็นงานที่เกี่ยวข้องกับชีวิตผู้ป่วย ผมไม่ขอรับผิดชอบใดๆต่อความผิดพลาดที่อาจเกิดขึ้นได้จากคำตอบของผม คุณต้องไปทดสอบและตรวจสอบว่าข้อมูลนั้นแสดงออกมาได้ถูกต้องหรือไม่เอาเองนะครับ
3 @R12854
ขอบพระคุณคะ ไม่ต้องกังวลใจเรื่องที่จะต้องรับผิดชอบหรอกคะ
เป็นการช่วยเหลือผู้ป่วยเสียอีก จะไปทดลองทำดูนะคะ
เป็นการช่วยเหลือผู้ป่วยเสียอีก จะไปทดลองทำดูนะคะ
4 @R12860
SQL พอ run แล้ว
1 ดูค่อนข้างยากคะ ต้องมาดูด้วยสายตาอีกที
2 ต้องเป็น PT_NO คนเดียวกัน ดิฉันจึงใส่ criteria เพิ่ม (DP1. PT_NO = DP2
.PT_NO)
3 ไม่ได้ตอบโจทย์ว่า ซ้ำกัน กี่วัน ตั้งแต่วันไหน ถึงวันไหน คะ
พยายามหาคำตอบต่อคะ
1 ดูค่อนข้างยากคะ ต้องมาดูด้วยสายตาอีกที
2 ต้องเป็น PT_NO คนเดียวกัน ดิฉันจึงใส่ criteria เพิ่ม (DP1. PT_NO = DP2
.PT_NO)
3 ไม่ได้ตอบโจทย์ว่า ซ้ำกัน กี่วัน ตั้งแต่วันไหน ถึงวันไหน คะ
พยายามหาคำตอบต่อคะ
5 @R12861
เห็นไหมๆ ผมหลุดจนได้ นี่แหล่ะครับที่ต้องทำหมายเหตุเอาไว้
เรื่องวันที่คาบเกี่ยวตั้งแต่วันไหนถึงวันไหนบ้าง ถ้าเป็นวันเริ่มต้นของการคาบเกี่ยว วันที่นั้นก็คือวันที่ที่มากกว่าระหว่าง DP1.B กับ DP2.B และวันที่สุดท้ายของการคาบเกี่ยวก็คือวันที่ที่น้อยกว่าระหว่าง DP1.E และ DP2.E ครับ ส่วนคาบเกี่ยวกันกี่วัน ก็แค่เอาวันสุดท้ายลบด้วยวันเริ่มต้นแล้วบวกด้วย 1 เท่านั้นเองครับ
SELECT .... , IIF(DP1.B > DP2.B, DP1.B, DP2.B) AS BLAP, IIF(DP1.E < DP2.E, DP1.E, DP2.E) AS ELAP, (DATEDIFF("D", BLAP, ELAP) +1) AS DLAP AS ELAP
FROM ...
WHERE ...
เรื่องวันที่คาบเกี่ยวตั้งแต่วันไหนถึงวันไหนบ้าง ถ้าเป็นวันเริ่มต้นของการคาบเกี่ยว วันที่นั้นก็คือวันที่ที่มากกว่าระหว่าง DP1.B กับ DP2.B และวันที่สุดท้ายของการคาบเกี่ยวก็คือวันที่ที่น้อยกว่าระหว่าง DP1.E และ DP2.E ครับ ส่วนคาบเกี่ยวกันกี่วัน ก็แค่เอาวันสุดท้ายลบด้วยวันเริ่มต้นแล้วบวกด้วย 1 เท่านั้นเองครับ
SELECT .... , IIF(DP1.B > DP2.B, DP1.B, DP2.B) AS BLAP, IIF(DP1.E < DP2.E, DP1.E, DP2.E) AS ELAP, (DATEDIFF("D", BLAP, ELAP) +1) AS DLAP AS ELAP
FROM ...
WHERE ...
6 @R12862
แก้ไขที่ผิด
AS DLAP AS ELAP
เป็น
AS DLAP
AS DLAP AS ELAP
เป็น
AS DLAP
7 @R12866
ขอบคุณคะ
อจ.ช่วยเหลือคนไข้ และทำความดีนะคะ อย่าเข้าใจผิดหรือกังวล
คะ ขอบคุณอีกครั้งนะคะ
อจ.ช่วยเหลือคนไข้ และทำความดีนะคะ อย่าเข้าใจผิดหรือกังวล
คะ ขอบคุณอีกครั้งนะคะ
Time: 0.3311s
เป็น Drug Z กับ A ใช้ร่วมกัน ตั้งแต่ 2/2/2554 – 22/2/2554 20 วัน
Drug Z กับ B ใช้ร่วมกัน XXXXX เนื่องจากไม่สามารถหา E_date ได้
อีกสัก 1 คำถามคะ ตรง field Drug หากดิฉันใส่ parameter [ใส่ชื่อยา] เวลา
run Query มีวิธีไดที่จะทำให้เป็น drop down list ได้บ้างคะ เพราะว่า คู๋ยาที่ตี
กันมีหลายคู่คะ
ดิฉันเคยถามผู้รู้มาแล้วว่าไม่มีทางทำได้ หากไม่ต้อง run ตรง Query นี้
โดยตรงพอมีทางอื่นอีกไหมคะ
ขอบคุณคะ