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

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

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

สำหรับใครที่เคยใช้ Query ใน MS Access เพื่อสืบค้นข้อมูล น่าจะเคยใช้เครื่องมือ Totals ( S ) เพื่อสรุปผลข้อมูลกันมาบ้างแล้ว
บางท่านอาจใช้ GroupBy , Sum หรือ Count ซึ่งจะให้ผลลัพธ์ที่แตกต่างกันไป


และอาจมีหลาย ๆ ท่าน เคยใช้ Max กับ Last แล้วไม่เห็นความแตกต่าง
อันเนื่องจากข้อมูลที่สืบค้นมีค่าที่มากสุดและค่าล่าสุดเหมือนกัน

ดังนั้น บทความนี้ จะกล่าวถึงความแตกต่างของผลลัพธ์จาก Query ที่ได้จากการใช้  Max และ  Last  
 
ลองพิจารณาข้อมูลดิบของตาราง PriceHistry ที่แสดงราคาต่อหน่วยของผลิตภัณฑ์ต่าง ๆ
โดยราคาดังกล่าวมีการบันทึกเวลาที่ปรับราคาที่ฟิลด์ DateTime

ตาราง PriceHistry

หากเราต้องการหาผลลัพธ์จาก Query เพื่อตอบคำถามดังนี้

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

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

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

   เราสามารถใช้ Last ที่ฟิลด์ UnitPrice และ ฟิลด์ Date Time ได้เลย    ดังรูป

Last ใช้เพื่อหาค่าที่มีการใส่ข้อมูล

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

ตารางหลังจากใช้ Last ที่ Field UnitPrice

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

ซึ่ง คำตอบที่ถูกต้อง คือ

ผลลัพธ์ที่ได้โดยใช้ Last ที่ Field Date

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

ผลลัพธ์ดังรูป

ถ้าเราสืบค้น โดยใช้ First หรือ Last ที่ ฟิลด์ DateTime ผลลัพธ์ที่ได้จะไม่ถูกต้อง
ถ้าเราสืบค้น โดยใช้ First หรือ Last ที่ ฟิลด์ DateTime ผลลัพธ์ที่ได้จะไม่ถูกต้อง
DLookUp("datetime","histryprices","unitprice=" & [unitprice])

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