1

私は2つのテーブルを持っています:

InventoryPart

PartNumber、PartDescription、CategoryID、EOQ、StockPrice、ReorderLevel、StockLevel、StockOnOrder、Weight

CustOrderLine

OrderID、PartNumber、UnitPrice、OrderQuantity、Discount、Status

各カテゴリで最も高価な在庫部品のPartNumber、PartDescription、StockPrice、CategoryIDのみを返す必要があります

これは私がこれまでに思いついた中で最高です...

SELECT IP.PartNumber, IP.PartDescription, IP.CategoryID, IP.StockPrice
FROM InventoryPart IP, CustOrderLine COL
WHERE IP.PartNumber = COL.PartNumber
AND COL.UnitPrice IN
  (SELECT MAX(COL.UnitPrice)
   FROM CustOrderLine COL)

このコードの問題は、カテゴリごとに区切るのではなく、すべてのカテゴリのMAXUnitPriceを返すことです。

私はこの問題に数時間立ち往生していて、今は良いことよりも害を及ぼしているように感じます。本当にありがとうございました。

4

2 に答える 2

1

このようなものは、サブクエリを使用して機能し、MAXUnitPriceを各CategoryIdに関連付けます。

SELECT DISTINCT IP.*
FROM InventoryPart IP
   JOIN CustOrderLine COL ON IP.PartNumber = COL.PartNumber
   JOIN (
    SELECT IP.CategoryID, MAX(COL.UnitPrice) MaxPrice
    FROM InventoryPart IP INNER JOIN
        CustOrderLine COL ON IP.PartNumber = COL.PartNumber
    GROUP BY IP.CategoryID
   ) T ON IP.CategoryId = T.CategoryId AND COL.UnitPrice = T.MaxPrice

これは、カテゴリごとの単価が最も高い在庫部品を示す縮小フィドルです。

幸運を。

于 2013-02-08T02:38:25.880 に答える
1

これが簡単なバージョンです。

SELECT  a.PartNumber, a.PartDescription, a.CategoryID, a.StockPrice
FROM    InventoryPart a
        INNER JOIN
        (
            SELECT  PartNumber, MAX(StockPrice) max_price
            FROM    Inventorypart
            GROUP   BY PartNumber
        ) b ON  a.partNumber = b.PartNumber AND
                a.StockPrice = b.max_price

パフォーマンスを向上させるには、INDEXon列を追加します(PartNumber, StockPrice)

ALTER TABLE InventoryPart ADD INDEX (PartNumber, StockPrice)

更新1

SELECT  a.PartNumber, a.PartDescription, a.CategoryID, a.StockPrice
FROM    InventoryPart a
        INNER JOIN
        (
            SELECT  PartNumber, CategoryID, MAX(StockPrice) max_price
            FROM    Inventorypart
            GROUP   BY PartNumber, CategoryID
        ) b ON  a.partNumber = b.PartNumber AND
                a.StockPrice = b.max_price AND
                a.CategoryID = b.CategoryID

ALTER TABLE InventoryPart ADD INDEX (PartNumber, StockPrice, CategoryID)
于 2013-02-08T02:44:28.507 に答える