gpt4 book ai didi

MySQL:查找子文档列表的最新值

转载 作者:行者123 更新时间:2023-11-29 08:39:43 26 4
gpt4 key购买 nike

我有一个包含四列的集合contentidtimestamplocationIDauthorID。这是我的数据的示例;在生产中,其长度为数千万行。

id    timestamp              locationID   authorID
1 2012-03-01 11:52:00 1 1
2 2012-03-16 19:56:00 1 2
3 2012-04-02 11:26:00 2 1
4 2012-04-22 11:52:00 2 3
5 2012-05-19 09:48:00 2 2
6 2012-05-30 07:12:00 2 1
7 2012-06-04 19:17:00 1 2

我想收集最新内容(按时间戳排序)与特定locationID匹配的authorID列表.

locationID = 2 查询的正确值为:[ 1, 3 ],因为 authorID 1 和 3 是最常见的最近在 locationID = 2“看到”,而 authorID 2 的最新内容位于 locationID 1。

我当然可以对每个 authorID 执行一个查询,但在生产环境中,authorID 数组的长度 >100,000。这看起来效率非常低(特别是当每个“子查询”都会访问这个数百万行的 content 集合时),并且我正在寻找一种更好的方法来从我的数据集中出现这些数据,最好足够快在页面渲染上执行。

最佳答案

有这样的事吗?这是来自 SQL Server,但我认为它也应该在 mySQL 中工作。

DECLARE @locationId INT
SET @locationId = 2;

SELECT *
FROM (SELECT AuthorId, Max(TimeStamp) as MaxTimeStamp
FROM Content C
WHERE LocationId = @locationId
GROUP BY AuthorId) AS CBL
LEFT JOIN Content AS C ON CBL.AuthorId = C.AuthorId
AND C.TimeStamp > CBL.MaxTimeStamp
WHERE C.AuthorId IS NULL

对于locationId = 2,返回1和3;对于 locationId = 1,它返回 2

根据 JW(谢谢!),正确的 mySql 方法:

SET @locationId := 2;

SELECT *
FROM (SELECT AuthorId, Max(TimeStamp) as MaxTimeStamp
FROM Content C
WHERE LocationId = @locationId
GROUP BY AuthorId) AS CBL
LEFT JOIN Content AS C ON CBL.AuthorId = C.AuthorId
AND C.TimeStamp > CBL.MaxTimeStamp
WHERE C.AuthorId IS NULL

关于MySQL:查找子文档列表的最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168261/

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