2017-07-04 1 views
1

私はMySQLのクエリで立ち往生してきました。テーブルには、次のとおりです。クエリ - 分(コスト)とそのコストのサプライヤを表示

CREATE TABLE items_costs (
    UPC varchar(15) NOT NULL, 
    SupplierID int(11) NOT NULL, 
    Current_as_of_Date datetime DEFAULT NULL, 
    Cost1 float DEFAULT NULL, 
    Cost2 float DEFAULT NULL, 
    Cost3 float DEFAULT NULL, 
    MSRP float DEFAULT NULL, 
    MAP float DEFAULT NULL, 
    Unique_Entry_Id datetime DEFAULT NULL, 
    PRIMARY KEY (UPC,SupplierID), 
    KEY SupplierID (SupplierID), 
    CONSTRAINT items_costs_ibfk_1 FOREIGN KEY (UPC) REFERENCES items (UPC), 
    CONSTRAINT items_costs_ibfk_2 FOREIGN KEY (SupplierID) REFERENCES suppliers (SupplierID) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8` 

私は各項目のCost1、Cost2、Cost3の最低を取得しています:今、私はその特定のコストに関連付けられている仕入先を取得する必要があり、しかし

MIN(LEAST(IFNULL(ic.Cost3, ic.Cost1), IFNULL(ic.Cost2, ic.Cost1), ic.Cost1)) AS Cost 

私が試してみた:

SELECT 
    ic.UPC, 
    ic.SupplierID, 
    ic.Current_as_of_Date, 
    ic.Cost1 AS Cost, 
    ic.MSRP, 
    ic.MAP, 
    s.SupplierName, 
    s.Map_YN AS Supplier_MAP 
FROM 
    items_costs AS ic 
     JOIN 
    suppliers AS s ON s.supplierId = ic.SupplierID 
WHERE 
    (ic.upc , ic.Cost1) IN (SELECT 
      ic_min.UPC, 
       MIN(LEAST(IFNULL(ic_min.Cost3, ic_min.Cost1), 
         IFNULL(ic_min.Cost2, ic_min.Cost1), 
         ic_min.Cost1)) AS Cost 
     FROM 
      items_costs ic_min 
     GROUP BY ic_min.UPC)) 

を...他のスレッドで推奨されているように、UPCによって最小のコストを与えます。しかし、依然としてユニークでなければならない重複したUPCを取得しています。

私はここで間違っていますか?

ありがとうございます!

答えて

0

あなたはあなたの助けのためにDISTINCT

SELECT DISTINCT 
     ic.UPC, 
     ic.SupplierID, 
     ic.Current_as_of_Date, 
     ic.Cost1 AS Cost, 
     ic.MSRP, 
     ic.MAP, 
     s.SupplierName, 
     s.Map_YN AS Supplier_MAP 
    FROM items_costs AS ic 
    JOIN suppliers AS s ON s.supplierId = ic.SupplierID 
    WHERE (ic.upc , ic.Cost1) IN (
     SELECT 
       ic_min.UPC, 
       MIN(LEAST(IFNULL(ic_min.Cost3, ic_min.Cost1), 
         IFNULL(ic_min.Cost2, ic_min.Cost1), 
         ic_min.Cost1)) AS Cost 
      FROM items_costs ic_min 
      GROUP BY ic_min.UPC)) 
0

感謝を使用することができます!

私はここで答えを見つけて、一般的な質問のようです:https://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html

SELECT 
ic1.upc, 
ic1.supplierid, 
ic1.MSRP, 
ic1.MAP, 
ROUND((LEAST(IFNULL(ic1.Cost3, ic1.Cost1), 
       IFNULL(ic1.Cost2, ic1.Cost1), 
       ic1.Cost1)), 
     2) AS Cost, 
s.SupplierName, 
s.Map_YN AS Supplier_MAP 
FROM 
items_costs AS ic1 

    JOIN 
suppliers AS s ON s.supplierid = ic1.supplierid 

WHERE 
ic1.cost1 = (SELECT 
     MIN(ic2.cost1) 
    FROM 
     items_costs AS ic2 
    WHERE 
     ic1.upc = ic2.upc) 
関連する問題