2011-07-28 11 views
2

各条件カテゴリの最小価格を選択しようとしています。私はいくつかの検索を行い、以下のコードを書いた。ただし、選択したフィールドにはnullが表示されます。どんな解決策ですか?SQLでグループごとに最小行を選択

SELECT Sales.Sale_ID, Sales.Sale_Price, Sales.Condition 
FROM Items 
LEFT JOIN Sales ON (Items.Item_ID = Sales.Item_ID 
AND Sales.Expires_DateTime > NOW() 
AND Sales.Sale_Price = (
SELECT MIN(s2.Sale_Price) 
FROM Sales s2 
WHERE Sales.`Condition` = s2.`Condition`)) 
WHERE Items.ISBN =9780077225957 

答えて

2

もう少し複雑なソリューションですが、Sale_IDを含むソリューションは以下のとおりです。

SELECT TOP 1 Sale_Price, Sale_ID, Condition 
FROM Sales 
WHERE Sale_Price IN (SELECT MIN(Sale_Price) 
        FROM Sales 
        WHERE 
        Expires_DateTime > NOW() 
        AND 
         Item_ID IN  
         (SELECT Item_ID FROM Items WHERE ISBN = 9780077225957) 
        GROUP BY Condition) 

「トップ1」は、1つ以上のセールで同じ最低価格が設定されていて、1つしか返品しない場合があります。

(内部クエリは@Michael Amesの回答から直接取得)

2

あなたがSales.Sale_IDを必要としない場合は、この解決策は簡単です:

SELECT MIN(Sale_Price), Condition 
FROM Sales 
WHERE Expires_DateTime > NOW() 
AND Item_ID IN 
    (SELECT Item_ID FROM Items WHERE ISBN = 9780077225957) 
GROUP BY Condition 

幸運!

関連する問題