จะแก้ไขโจทย์นี้ด้วย SQL ยังไงครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,671   6
URL.หัวข้อ / URL
จะแก้ไขโจทย์นี้ด้วย SQL ยังไงครับ

พอดีจะสร้าง Query สำหรับแสดงข้อมูลประวัติเบอร์โทรที่มีการเปลี่ยนแพคเกจน่ะครับ โดยผมมีข้อมูลประวัติเบอร์โทรศัพท์ใน Table นึง มีข้อมูล ดังนี้

เบอร์โทรศัพท์, แพคเกจ, ชื่อ, วันที่มีผล
0811111111, 001, เกวลี, 1Jan10
0811111111, 001, เกวลิน, 1Feb10
0811111111, 002, เกวลิน, 1Mar10
0811111111, 002, เกวลัย, 1Apr10

โดยจะต้องแสดงเรคคอร์ดวันที่มีผลแรกของแต่ละเพคเกจ ผลลัพธ์คือ

0811111111, 001, เกวลี, 1Jan10
0811111111, 002, เกวลิน, 1Mar10

ขอรบกวนด้วยครับ

6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R05068
select T1.* from เทเบิล as T1 where T1.วันที่มีผล in (select min(T2.วันที่มีผล) from เทเบิล as T2 where T2.เบอร์โทรศัพท์ = T1.เบอร์โทรศัพท์ and T2.แพคเกจ = T2.แพคเกจ)

เรื่องการทำคิวรี่ คุณต้องไปฝึกเองเยอะๆ ไม่งั้นจะไม่เข้าใจ
2 @R05069
โค้ดของอาจารย์สันติสุข ผมทดลองแล้ว พบว่าจะมีปัญหากับเคสที่พนักงานเปลี่ยนไปใช้แพคเกจอื่น แล้วเปลี่ยนกลับมาใช้แพคเกจเดิมครับ
Ex.
เบอร์โทรศัพท์, แพคเกจ, ชื่อ, วันที่มีผล
0811111111, 007, ชญาภา, 1-ม.ค.-10
0811111111, 008, ชญาภา, 1-ม.ค.-11
0811111111, 008, ชญาภี, 1-ม.ค.-12
0811111111, 007, ชญาภา, 1-ม.ค.-13

โค้ดอาจารย์สันติสุขจะแสดงผลลัพธ์เป็น
0811111111, 007, ชญาภา, 1-ม.ค.-10
0811111111, 008, ชญาภา, 1-ม.ค.-11
เท่านั้นครับ ซึ่งผลลัพธ์จริงๆจะต้องออก

0811111111, 007, ชญาภา, 1-ม.ค.-10
0811111111, 008, ชญาภา, 1-ม.ค.-11
0811111111, 007, ชญาภา, 1-ม.ค.-13

โดยผมก็พยายามฝึกเขียน SQL อยู่ แต่ยังหาทางไม่ได้เลย จึงต้องขอคำแนะนำด้วยครับ
3 @R05070
นี่คือเงื่อนไขที่คุณไม่ได้แจ้งมาแต่แรก เห็นไหมครับว่า ข้อกำหนดตกหล่นไปนิดเดียว โปรแกรมก็ไม่ได้ให้ผลตามที่ต้องการแล้ว .. ทำไมผมถึงพูดเรื่องนี้ก่อน ก็เพื่อให้เป็นประสบการณ์ของคุณได้เห็นชัดๆว่า การอธิบายรายละเอียดหรือ specification ของงานมีความสำคัญในกระบวนการทำโปรแกรมหน่ะครับ

กลับมาที่คิวรี่ต่อ ... เสียใจด้วยที่ต้องบอกว่า ผม ไม่คิดว่า จะสร้างคิวรี่ใน Access เพื่อให้คำตอบตามต้องการจากเงื่อนไขแบบนี้ได้ แต่ถ้าใช้การเขียนด้วยโปรแกรม VBA แทน ผมว่าน่าจะง่ายกว่ามาก
4 @R05072
อ่อครับ ต้อง VBA เลยเหรอครับ

ผมเขียนเป็นแค่ SQL น่ะครับ งานเข้าอีกแล้ว

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

select T1.* from เทเบิล as T1 where T1.แพคเกจ not in (select top 1 T2.แพคเกจ from เทเบิล as T2 where T2.เบอร์โทรศัพท์ = T1.เบอร์โทรศัพท์ and T2.วันที่มีผล < T1.วันที่มีผล order by T2.วันที่มีผล desc)
6 @R05078
วิธีใหม่ของอาจารย์สันติสุข ผมนำไปประยุกต์ใช้แล้วสามารถได้ผลลัพธ์ตามที่ต้องการ

ขอขอบคุณอาจารย์สันติสุขมากครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3339s