我正在寻找具有最新产品价格的SQL输出。 product_price可以针对产品编号多次更新,因此可以创建多个行。我希望每个product_number消除多行。
SELECT
product_number
,product_price
,MAX(update_timestamp)
FROM product_price
ORDER BY 1,2
答案 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 ;