การคิวรี่ราคาล่าสุดของสินค้าขึ้นมาแสดง
กระทู้เก่าบอร์ด อ.Yeadram

 1,362   1
URL.หัวข้อ / URL
การคิวรี่ราคาล่าสุดของสินค้าขึ้นมาแสดง

รบกวนเรียนถามอารจารย์และเซียน access ทั้งหลายด้วยครับ
ผมงมโจทย์นี้มาเป็นปีแล้วยังตีโจท์ไม่แตกเลย

สิ่งที่ต้องการ
้ต้องการทำ price list (ใบแสดงราคาสินค้า) ซึ่งต้องมีการ update ราคาสินค้าอยู่ตลอดเวลา เพื่อนำไปแสดงยัง form หรือ report ต่อไป

table
1.Item มีฟีล ItemCode, ItemName PriceCode
2.PriceUpdate มีฟิล PriceCode, PriceA, PriceB, PriceC, PriceDate

คำถาม
-การออกแบบ table ที่ว่านี้ เพียงพอ และเหมาะสมต่อการทำงานแบบที่ต้องการแล้วหรือไม่ครับ
-ควรจะเขียน quiry แบบใด เพื่อให้ง่ายและกระชับตามข้อมูลที่ต้องการครับ

* เคยลองคิวรี่ดูแล้ว ผลลัพธ์ที่ได้คือ Item นั้น ๆ มักจะให้ผลลัพธ์ซ้ำกัน โดยไม่นำผลลัพธ์ของวันที่ ๆ มีการปรับราคาล่าสุดมาแสดง

** เงื่อนไขที่สำคัญคือ ต้องการนำเรคคอร์ด ที่มีวันที่ ๆ ล่าสุดของ Item นั้น ๆ มาแสดงเพียง 1 เรคคอร์ด เพื่อทำใบราคาสินค้าที่มีการ update อยู่เรื่อยๆ


รบกวนขอคำชี้แนะครับ
ขอบคุณครับ

-

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

1 @R11960
การออกแบบก็ถูกต้องนะครับ ส่วนคิวรี่ก็จะเป็น

select T.*, P.*
from Item as T
        inner join (select PP.*
                            from PriceUpdate as PP
                          where PP.PriceDate =
(select max(PriceUpdate.PriceDate) from PriceUpdate
                                                               where PriceUpdate.PriceCode = PP.PriceCode)
) as P
        on T.PriceCode = P.PriceCode
order by T.ItemCode

โดยมีแนวคิดคือ
1) ต้องการตาราง Item (T) เชื่อมโยงกับ ตารางราคาล่าสุด (เรียกชื่อเล่นว่า P)
2) ตารางราคาล่าสุด (P) หาได้จากตารางราคา (เรียกชื่อเล่นว่า PP) ที่มีวันที่เป็นวันที่มากที่สุดสำหรับรหัสราคานั้นๆ
3) วันที่มากที่สุดสำหรับรหัสราคานั้นๆ หาได้จาก max(PriceUpdate.PriceDate) ของรหัสราคานั้นๆ

หมายเหตุ : ในคิวรี่ที่มีการเรียกคิวรี่ซ้อนอยู่ภายใน (sub query) ถ้าคิวรี่ภายนอกและภายในเป็นเทเบิลเดียวกัน เราต้องสร้างชื่อเล่น (Alias โดย syntax เขียนว่า as) เพื่อให้เกิดความแตกต่าง ระบบจะได้รู้ว่าเราต้องการอ้างถึงเทเบิลภายในหรือภายนอกกันแน่ โดยอ้างชื่อฟิลด์ด้วยการระบุชื่อเล่นของเทเบิลไว้หน้าชื่อฟิลด์อีกที เช่น PP.PriceCode

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