หาเรคคอร์ดล่าสุด
กระทู้เก่าบอร์ด อ.Yeadram

 1,410   4
URL.หัวข้อ / URL
หาเรคคอร์ดล่าสุด

คำถาม คือ ในกรณีที่เรามีตาราง(TblRecUp )ข้อมูล ดังนี้
DRUG_ID      DATE_RECV        QTY_RECV        UNITCOST
          3     25 /12 /2009            1000              44
          3      3 /10 /2009            1262              44
          3      3 /10 /2009              48   41 .9047619
          4     18 /12 /2009             100            100
          4      6 /10 /2009             100            100
          4      3 /10 /2009              35            100
          4     19 /10 /2009             100            100
          4        1/2 /2010             100            100
          4     16 /11 /2009             100            100
          5      3 /10 /2009               0        140 .17
          5        5/1 /2010              60        140 .17
          5     16 /10 /2009              60        140 .17
          5     13 /11 /2009              60        140 .17
          7      3 /10 /2009               0             50
          7     18 /12 /2009              20          51 .63
          7      4 /10 /2009               5             50
          7      4 /12 /2009               5             50
          9      3 /10 /2009              70        1348 2
          9      3 /10 /2009               2        1348 2
        10      2 /11 /2009             200            7.49
        10        8/2 /2010             200            7.49
        10      3 /10 /2009             160            7.49
        10      3 /10 /2009             190            7.49
        10     26 /12 /2009             200            7.49

โจทย์คือ เราต้องการทราบราคา(UNITCOST)และวันที่ล่าสุด(DATE_RECV)ที่รหัสแต่ละตัว(DRUG_ID)ได้รับ ผมใช้คำสั่ง SQL ช่วยในการคิวรีข้อมูลดังนี้
SELECT TblRecUp.DRUG_ID, TblRecUp.DATE_RECV, TblRecUp.UNITCOST
FROM TblRecUp
WHERE TblRecUp.UNITCOST In
(SELECT Top 1 UNITCOST
FROM TblRecUp AS Top1
WHERE Top1.DRUG_ID = TblRecUp.DRUG_ID
ORDER BY Top1.DATE_RECV DESC, Top1.UNITCOST DESC)
ORDER BY TblRecUp.DRUG_ID, TblRecUp.DATE_RECV, TblRecUp.UNITCOST;
ผลลัพท์ที่ได้
DRUG_ID      DATE_RECV        UNITCOST
           3     3 /10 /2009              44
           3    25 /12 /2009              44
           4     3 /10 /2009             100
           4     6 /10 /2009             100
           4    19 /10 /2009             100
           4    16 /11 /2009             100
           4    18 /12 /2009             100
           4       1/2 /2010             100
           5    16 /10 /2009        140 .17
           5    13 /11 /2009        140 .17
           5       5/1 /2010        140 .17
           7    18 /12 /2009           51.63
           9     3 /10 /2009        1348 2
           9     3 /10 /2009        1348 2
        10      3 /10 /2009            7.49
        10      3 /10 /2009            7.49
        10      2 /11 /2009            7.49
        10     26 /12 /2009            7.49
        10        8/2 /2010            7.49
ผลลัพท์ที่ต้องการคือ
DRUG_ID      DATE_RECV        UNITCOST
          3     25 /12 /2009              44
          4        1/2 /2010            100
          5        5/1 /2010        140 .17
          7     18 /12 /2009          51 .63
          9      3 /10 /2009        1348 2
        10        8/2 /2010            7.49
ไม่ทราบว่าผมใช้ ใช้คำสั่ง SQL ผิดหรือเปล่าผมข้อคำอธิบายและถ้าต้องการให้ผลที่ออกมาตามที่ต้องการต้องทำอย่างไร
Jeab
0866320802
zidan184@gmail.com

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

1 @R05094
SELECT DRUG_ID,max(DATE_RECV) as mDate, max(UNITCOST) as mUnitCost
FROM TblRecUp
group by DRUG_ID;
2 @R05095
คิวรี่ที่คุณสร้างเกือบใช้ได้แล้ว เพียงแต่ ทำไมคุณใช้ UNITCOST เป็นตัวเปรียบเทียบระหว่าง main query และ sub query ตามที่เขียนไว้ว่า WHERE TblRecUp.UNITCOST In ที่ถูกต้องน่าจะเป็นการใช้ DATE_RECV เป็นตัวเทียบสิครับ ทั้งนี้ทั้งนั้น...ต้องอยู่ภายใต้เงื่อนไขที่ว่า ใน 1 วันจะไม่มีการปรับปรุงราคามากกว่า 1 ครั้ง ถ้ามี..การออกแบบเทเบิลที่เก็บแต่วันที่โดยไม่มีเวลาลงบันทึกไปด้วย จะไม่สามารถให้คำตอบนี้ได้ครับ

และอีกอย่าง ในกรณีอย่างนี้ sub query ควรเป็นตามข้างล่างนี้ถึงจะดูถูกต้องกว่า อ่านแล้วเข้าใจ สั้นกระชับ ตรงจุดประสงค์กว่า

(SELECT Max(DATE_RECV) FROM TblRecUp AS Top1 WHERE Top1.DRUG_ID = TblRecUp.DRUG_ID)
3 @R05097
อย่างที่ อ.Yeadram บอก ผมไม่แ่น่ใจว่าตรงตามความต้องการหรือไม่ เพราะ max(DATE_RECV) และ max(UNITCOST) นั้น ไม่จำเป็นต้องมาจากเรคอร์ดเดียวกัน อาจต่างเรคอร์ดที่อยู่ในกลุ่ม DRUG_ID เดียวกันก็ได้
4 @R05456
คุณ J007 สรุปโค๊ดที่สมบูรณ์ให้ดูหน่อยได้ไหมครับ ผมกำลังทำเรื่องลักษณะนี้พอดี ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3410s