【问题标题】:Least price upcs for products by store wise and by Global from a price table从价格表中按商店和全球最低价格上涨
【发布时间】:2012-09-15 18:35:27
【问题描述】:

这就是我的价格表的样子

Product_id prod_upc    str_nbr  Price
prod110010 4122067755  12       1.22
prod110010 4122067755  21       2.88
prod110010 4122063030  21       3.88
prod110010 4122063030  12       2.88
prod110010 4122063031  12       2.88
prod110010 4122063031  21       4.88

我有两个要求要解决

  1. 为所有商店的所有产品获得价格最低的 UPC?根据以上数据,输出应该是

    prod110010  4122067755  12      1.22
    
  2. 为每家商店的所有产品获得最低价格的 upc ?根据上述数据,输出应该是

    prod110010  4122067755  12      1.22
    prod110010  4122067755  21      2.88
    

我尝试了可能的内部查询,但没有任何效果,请这里的任何 SQL 专家帮助。

我对特定商店的查询是:

SELECT DISTINCT t.product_id, t.prod_upc,t.str_nbr, t.MINVALUE 
  FROM ( SELECT dpc.product_id, hpd.prod_upc, str_nbr
              , MIN(hpd.curr_retl_prc) OVER 
                 (PARTITION BY dpc.product_id) MINVALUE 
           FROM prc_dta ) AS T

对于全球:

SELECT DISTINCT t.product_id, t.prod_upc, t.str_nbr, t.MINVALUE 
  FROM ( SELECT dpc.product_id, hpd.prod_upc, hpd.str_nbr
              , MIN(hpd.curr_retl_prc) OVER 
                    (PARTITION BY dpc.product_id,hpd.str_nbr) MINVALUE 
           FROM prc_dta) AS T

【问题讨论】:

  • 请显示您尝试过的代码并解释它是如何失败的。
  • 请编辑您的帖子以添加该信息(并注意格式)。在标签下方有一个“编辑”链接。
  • 编辑您的问题,添加您的查询。

标签: sql sql-server


【解决方案1】:
WITH ranked (Product_id, prod_upc, str_nbr, Price, pricerank)
AS ( SELECT Product_id, prod_upc, str_nbr, Price,
    ROW_NUMBER() OVER ( PARTITION BY str_nbr ORDER BY Price ) AS pricerank
    FROM tbl
   )
SELECT Product_id, prod_upc, str_nbr, Price FROM ranked WHERE pricerank = 1

【讨论】:

  • 这给了我所有产品价格的最小值匹配的行,假设表中的最低价格值为 1.2,这给了我价格值为 1.2 的行... . 但我的意图是获取每种产品和每个商店中每种产品的最低价格行
【解决方案2】:
This query to get min price upc row : 

    select top 1 Product_id,prod_upc,str_nbr,Price from tbl where prod_upc=(select top 1 min(prod_upc) from tb1 ) order by Price asc

This query get all row of min price of upc:

select Product_id,prod_upc,str_nbr,Price from tbl where prod_upc=(select top 1 min(prod_upc) from tb1 ) order by Price asc

【讨论】:

  • 我无法理解其中 prod_upc=(select top 1 min(prod)_upc from tb1 prod_upc 是我表中的 upc 列的条件
  • 当子查询应该返回与 MIN(price) 关联的 UPC 时,该子查询错误地用于 MIN(prod_upc)
  • 我想获取最低价格的 upc 但不是最低 UPC 值....但是内部查询看起来相反
猜你喜欢
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2016-04-01
  • 2016-04-25
  • 2017-04-13
  • 1970-01-01
相关资源
最近更新 更多