gpt4 book ai didi

sql - 如何获取 2 列组合的最后记录?

转载 作者:行者123 更新时间:2023-12-05 03:55:40 25 4
gpt4 key购买 nike

我认为我的情况可以与 CamelCamelCamel、Keepa 等服务进行比较。假设我每天跟踪几个国家的一篇文章的价格。所以我的表,我们称之为 Trend,看起来像这样

Id     Created      ArticleId    Country    Price
-------------------------------------------------
01 19/11/05 452 US 45.90
02 19/11/05 452 CA 52.99
03 19/11/05 452 MX 99.99
04 19/11/06 452 US 20.00
05 19/11/06 452 CA 25.00
06 19/11/06 452 MX 50.00
...
97 19/11/05 738 US 12.99
98 19/11/05 738 CA 17.50
99 19/11/05 738 MX 45.50

现在是第二天,我想更新 Trend 表。如果某个国家/地区的价格仍然相同,我将跳过商品/国家/地区组合。如果有新价格,我会添加新记录。

现在我想查询表以获取每个 ArticleId/Country 组合。但只有它的最后一条记录(按时间戳排序)。因此,以上面的示例为例,我希望为 ArticleId 获取记录 040506 >452。不是 010203

所以我从这个基本查询开始。但是我如何才能改变它以获得我预期的结果呢?

SELECT
*
FROM
Trend
ORDER BY
Created DESC

最佳答案

一种方法使用相关子查询进行过滤:

select t.*
from trend t
where t.created = (
select max(t1.created)
from trend t1
where t1.articleId = t.articleId and t1.country = t.country
)

为了提高性能,您需要在 (articleId, country, created) 上建立索引。

您可能还想考虑反左连接方法:

select t.*
from trend t
left join trend t1
on t1.articleId = t.articleId
and t1.country = t.country
and t1.created > t.created
where t1.articleId is null

最后,另一种典型的解决方案是使用聚合查询连接表:

select t.*
from trend t
inner join (
select articleId, country, max(created) created
from trend
group by articleId, country
) t1
on t1.articleId = t.articleId
and t1.country = t.country
and t1.created = t.created

哪种解决方案性能更好取决于数据的大小和分布。

关于sql - 如何获取 2 列组合的最后记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60046409/

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