2017-05-16 60 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