กระทู้เก่าบอร์ด อ.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 อยู่เรื่อยๆ
รบกวนขอคำชี้แนะครับ
ขอบคุณครับ
-
ผมงมโจทย์นี้มาเป็นปีแล้วยังตีโจท์ไม่แตกเลย
สิ่งที่ต้องการ
้ต้องการทำ 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
Time: 0.3356s
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 ที่ไหนบ้าง