ผลลัพธ์จากการใช้ Max และ Last ของเครื่องมือ Totals ใน Query

ผลลัพธ์จากการใช้ Max และ Last ของเครื่องมือ Totals ใน Query
สำหรับใครที่เคยใช้ Query ใน MS Access เพื่อสืบค้นข้อมูล น่าจะเคยใช้เครื่องมือ Totals ( S ) เพื่อสรุปผลข้อมูลกันมาบ้างแล้วบางท่านอาจใช้ GroupBy , Sum หรือ Count ซึ่งจะให้ผลลัพธ์ที่แตกต่างกันไป
และอาจมีหลาย ๆ ท่าน เคยใช้ Max กับ Last แล้วไม่เห็นความแตกต่าง
อันเนื่องจากข้อมูลที่สืบค้นมีค่าที่มากสุดและค่าล่าสุดเหมือนกัน
ดังนั้น บทความนี้ จะกล่าวถึงความแตกต่างของผลลัพธ์จาก Query ที่ได้จากการใช้ Max และ Last
ลองพิจารณาข้อมูลดิบของตาราง PriceHistry ที่แสดงราคาต่อหน่วยของผลิตภัณฑ์ต่าง ๆ
โดยราคาดังกล่าวมีการบันทึกเวลาที่ปรับราคาที่ฟิลด์ DateTime

หากเราต้องการหาผลลัพธ์จาก Query เพื่อตอบคำถามดังนี้
1.อยากทราบราคาล่าสุดที่ Update ในแต่ละผลิตภัณฑ์ เป็นราคาเท่าไหร่
และตั้งราคานั้น ๆ เมื่อใด
2.อยากทราบราคาที่มากที่สุด ในแต่ละผลิตภัณฑ์ เป็นราคาเท่าไหร่
และตั้งราคานั้น ๆ เมื่อใด
จากคำถาม เราน่าจะเลือกใช้ Max หรือ Last ได้ถูกต้อง เนื่องจากแปลตรง ๆ อยู่แล้ว นั่นคือ
-> Max ใช้เพื่อหาค่าที่มากสุด
-> Last ใช้เพื่อหาค่าที่มีการใส่ข้อมูล
เราลองมาดูผลการสืบค้น และ วิธีการสืบค้นกันดีกว่า
1.อยากทราบราคาล่าสุดที่ Update ในแต่ละผลิตภัณฑ์ เป็นราคาเท่าไหร่
และ ตั้งราคานั้น ๆ เมื่อใด
เราสามารถใช้ Last ที่ฟิลด์ UnitPrice และ ฟิลด์ Date Time ได้เลย ดังรูป
1.อยากทราบราคาล่าสุดที่ Update ในแต่ละผลิตภัณฑ์ เป็นราคาเท่าไหร่
และตั้งราคานั้น ๆ เมื่อใด
2.อยากทราบราคาที่มากที่สุด ในแต่ละผลิตภัณฑ์ เป็นราคาเท่าไหร่
และตั้งราคานั้น ๆ เมื่อใด
จากคำถาม เราน่าจะเลือกใช้ Max หรือ Last ได้ถูกต้อง เนื่องจากแปลตรง ๆ อยู่แล้ว นั่นคือ
-> Max ใช้เพื่อหาค่าที่มากสุด
-> Last ใช้เพื่อหาค่าที่มีการใส่ข้อมูล
เราลองมาดูผลการสืบค้น และ วิธีการสืบค้นกันดีกว่า
1.อยากทราบราคาล่าสุดที่ Update ในแต่ละผลิตภัณฑ์ เป็นราคาเท่าไหร่
และ ตั้งราคานั้น ๆ เมื่อใด
เราสามารถใช้ Last ที่ฟิลด์ UnitPrice และ ฟิลด์ Date Time ได้เลย ดังรูป

และ ผลลัพธ์ที่ได้คือ

2.อยากทราบราคาที่มากที่สุด ในแต่ละผลิตภัณฑ์ เป็นราคาเท่าไหร่
และ ตั้งราคานั้น ๆ เมื่อใด
ซึ่ง คำตอบที่ถูกต้อง คือ

แต่ ถ้าเราสืบค้น โดยใช้ First หรือ Last ที่ ฟิลด์ DateTime ผลลัพธ์ที่ได้จะไม่ถูกต้อง
ผลลัพธ์ดังรูป


ถ้าต้องการให้ผลลัพธ์ถูกต้อง สามารถใช้ฟังก์ชัน DLookup ดังนี้
DLookUp("datetime","histryprices","unitprice=" & [unitprice])
เพื่อเป็นการค้นหาค่าของ ฟิลด์ DateTime จากตาราง HistryPrices โดยที่ UnitPrice เท่ากับ MaxOfUnitPrice ใน Record นั้น ๆ

ทั้งนี้ตัวอย่างการใช้ Dlookup ในกรณีนี้
เป็นการหา DateTime ของ UnitPrice สูงสุดที่มีเพียง DateTime เดียวเท่านั้น
แต่ถ้า UnitPrice สูงสุด ในผลิตภัณฑ์ใดใด มีได้หลาย Record
คงต้องมีการใช้ฟังก์ชันอื่นเพิ่มด้วย หรือ ไม่ต้องใช้ฟังก์ชันใดๆ เลยก็ได้
ขึ้นอยู่กับผลลัพธ์ที่ต้องการสืบค้นค่ะ
เป็นการหา DateTime ของ UnitPrice สูงสุดที่มีเพียง DateTime เดียวเท่านั้น
แต่ถ้า UnitPrice สูงสุด ในผลิตภัณฑ์ใดใด มีได้หลาย Record
คงต้องมีการใช้ฟังก์ชันอื่นเพิ่มด้วย หรือ ไม่ต้องใช้ฟังก์ชันใดๆ เลยก็ได้
ขึ้นอยู่กับผลลัพธ์ที่ต้องการสืบค้นค่ะ