2017-05-16 91 views
2

我在這裏是新來的,因爲我剛剛跳入深入瞭解(小孩池)學習SQL select查詢。我有這樣的SQL開發人員提出查詢:在查詢中限制結果MAX()仍然返回多行

select 
    prod_prices.store_ID, 
    prod_prices.prod_ID, 
    prod_prices.supp_ID, 
    MAX(prod_prices.promo_price) AS max_promo_price, 
    prod_prices.sell_price, 
    MAX(prod_prices.start_date) AS max_start_date 
FROM 
    prod_prices 
WHERE 
     prod_prices.store_ID = 3 
    AND 
     prod_prices.supp_ID = 1178 
GROUP BY 
    prod_prices.store_ID, 
    prod_prices.prod_ID, 
    prod_prices.supp_ID, 
    prod_prices.sell_price 
HAVING 
    MAX(prod_prices.start_date) > '16.04.17' 
AND 
    MAX(prod_prices.start_date) < '17.05.17' 

返回:

"store_ID" "prod_ID" "supp_ID" "MAX_promo_price" "sell_price" "start_date" 
3  121752  1178  2   0,88  16.05.17 
3  121752  1178  2   0,76  16.05.17 
3  121754  1178  1   0,45  16.05.17 
3  121756  1178  1   0,45  16.05.17 
3  121758  1178  2   0,96  16.05.17 
3  121758  1178  2   0,76  15.05.17 
3  121760  1178  1   0,54  16.05.17 
3  121762  1178  1   0,41  16.05.17 
3  121764  1178  1   0,37  16.05.17 
3  121766  1178  1   0,34  16.05.17 
3  121773  1178  2   0,83  16.05.17 
3  121773  1178  2   0,65  16.05.17 
3  121777  1178  1   0,98  16.05.17 
3  121779  1178  2   0,88  16.05.17 
3  121779  1178  2   0,89  24.04.17 

由於產品代碼能在每一個最新的起始日期多個條目由於promo_price(1 =普通,2 =銷售價格)和卡路里的原因,我需要縮小這一點,所以任何獨特的prod_ID將只有一個條目(最高的start_date,最高的promo_price)。 不幸的是,我不太瞭解如何通過查詢來實現row_number()或分區等,我非常感謝您的幫助。如果有什麼好的學習資源,我也會對它們進行Appreacite!

+0

最高的促銷價格或最高的賣價?因爲最高的promo_price始終爲2(1 =常規,2 =銷售價格)? –

回答

0

我可能是錯的,但我相信你的GROUP BY擁有sell_price可以讓group by把它們合併成一個單一的條目,其他條目都是一樣的,價格也不一樣。

我會刪除

GROUP BY sell_price 

和修改

prod_prices.sell_price 

MAX(prod_prices.sell_price) AS max_sale_price, 

這應該讓你與該項目的最高價格列出的每個項目

+0

對不起,遲到的回覆,沒有得到一個機會訪問數據庫。使用max_sale_price(或min,因爲商店中的實際價格將是較低的銷售/促銷價格)的問題似乎是從整個表格而不是從具有最新日期條目的條目。 – Ledenko