试图消除重复行SQL查询

时间:2014-01-02 21:58:14

标签: mysql sql

我正在寻找具有最新产品价格的SQL输出。 product_price可以针对产品编号多次更新,因此可以创建多个行。我希望每个product_number消除多行。

 SELECT
 product_number
 ,product_price
 ,MAX(update_timestamp)
 FROM product_price
 ORDER BY 1,2

4 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。我的首选是子查询。首先得到产品编号,它是maxtimestamp:

SELECT product_number
 ,MAX(update_timestamp) as maxtimestamp
 FROM product_price
group by product_number

现在将其转换为子查询并将其连接到第一个表以过滤除最大值之外的所有子句:

select a.product_number, a.maxtimestamp, b.product_price
from    ( SELECT product_number ,MAX(update_timestamp) as maxtimestamp
FROM product_price
group by product_number) a
inner join product_price b on a.product_number = b.product_number 
    and a.maxtimestamp =   b.update_timestamp

答案 1 :(得分:0)

如果你只想要最新的,那么尝试在其中粘贴TOP 1子句并删除MAX:SELECT TOP 1  产品编号  ,PRODUCT_PRICE  ,update_timestamp  来自product_price  订购1,2

答案 2 :(得分:0)

假设您想要每个产品的最新更新价格 ,请尝试以下操作:

SELECT
  Ranked.product_number,
  Ranked.product_price,
  Ranked.update_timestamp
FROM
(
  SELECT
    pp.product_number,
    pp.product_price,
    pp.update_timestamp,
    DENSE_RANK() OVER (
      PARTITION BY pp.product_number
      ORDER BY pp.update_timestamp DESC
    ) AS TimeRank
  FROM product_price AS pp
) AS Ranked
WHERE Ranked.TimeRank = 1

中心的密集排名表示在每个产品(PARTITION BY)中,首先对最新更新(update_timestamp DESC)进行排名。然后在外部查询中,我们只取#1(TimeRank = 1)。

答案 3 :(得分:0)

试试这个

  SELECT
  product_number
  ,product_price
  ,update_timestamp
 FROM product_price
 ORDER BY update_timestamp DESC LIMIT 1

update_timestamp订购,然后获取第一个结果。

如果您想让每件产品都有最新的更新时间,请使用此

 SELECT 
p.*
FROM
    product_price p
INNER JOIN
    ( SELECT 
          product_number, MAX(update_timestamp) AS latest
      FROM
          product_price
      GROUP BY 
          product_number
    ) AS groupedp
  ON  groupedp.product_number = p.product_number
  AND groupedp.latest = p.update_timestamp ;