gpt4 book ai didi

MySQL如何在搜索查询中获取链接表中的第二个最新记录

转载 作者:行者123 更新时间:2023-11-29 09:36:47 25 4
gpt4 key购买 nike

我有一个 MySQL 数据库,其中有两个链接表“产品”和“价格历史记录”。它们通过productID 字段链接。每当产品价格发生变化时,我都会创建新的历史记录。产品的最新历史记录具有最新价格。我还将当前价格存储在产品表中。我想运行一个报告,在其中可以检索第二个最新价格历史记录,以便我可以比较当前价格和最新价格。我尝试了下面的 sql 查询,它返回最新的价格历史记录,即当前价格。我怎样才能获得第二个最近的价格历史记录?对于较新的记录,historyID 会更高,因为它是自动增量,并且对于较新的记录,价格历史 updateTime 也会更新,因此这可能是一种排序方式。谢谢!

SELECT 
product.code, product.currentPrice, priceHistory.price,
product.url, product.manuID, product.lastSeenTime,
priceHistory.updateTime, product.dateAdded,
priceHistory.historyID
FROM product, priceHistory
WHERE product.idProduct = priceHistory.productID
GROUP BY priceHistory.productID
HAVING count(*) > 1
ORDER BY `product`.`lastSeenTime` DESC

最佳答案

您可以使用ROW_NUMBER()窗口函数根据任何动态顺序为行分配编号。完成此操作后,您就可以简单地按该数字进行过滤。

例如:

with
h as (
select *,
row_number() over(partition by productid order by updatetime desc) as rn
from pricehistory
)
select
p.code,
p.currentprice,
h.price,
p.url,
p.manuid,
p.lastseentime,
h.updatetime,
p.dateadded,
h.historyid
from product p
left join h on h.productid = p.productid and h.rn = 2

编辑:

如果您无法使用 CTE,则可以使用表表达式重写查询,如下所示:

select
p.code,
p.currentprice,
h.price,
p.url,
p.manuid,
p.lastseentime,
h.updatetime,
p.dateadded,
h.historyid
from product p
left join (
select *,
row_number() over(partition by productid order by updatetime desc) as rn
from pricehistory
) h on h.productid = p.productid and h.rn = 2

关于MySQL如何在搜索查询中获取链接表中的第二个最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com