gpt4 book ai didi

mysql - 帮忙写个query : Confusion over order of operations of GROUP BY and ORDER BY

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:51 25 4
gpt4 key购买 nike

我有一个名为 Info 的表:

int objectId;
int time;
int x, y;

系统中存在大量冗余数据——即objectId不是唯一的。对于每个 objectId,可以有多个 time, x, y 条目。

我想检索每个对象的最新位置列表。我从这个查询开始:

SELECT * FROM Info GROUP BY objectId

这正是我正在寻找的那种列表。但是我还想获得每个对象的最新时间,所以我尝试了:

SELECT * FROM Info GROUP BY objectId ORDER BY time DESC

这给了我一个 time 信息的下降列表。但是,我不认为它做了我想要的 - 即返回每个对象的最新 time, x, y

谁能想象一个查询来做我想做的事?

更新 我已经尝试了前三个解决方案,以了解它们在包含大约 50,000 个信息的数据集上的表现如何。以下是结果:

-- NO INDEX: forever
-- INDEX: 7.67 s

SELECT a.*
FROM Info AS a
LEFT OUTER JOIN Info AS b ON (a.objectId = b.objectId AND a.time < b.time)
WHERE b.objectId IS NULL;

-- NO INDEX: 8.05 s
-- INDEX: 0.17 s

select a.objectId, a.time, a.x, a.y
from Info a,
(select objectId, max(time) time from Info group by objectId) b
where a.objectId = b.objectId and a.time = b.time;

-- NO INDEX: 8.30 s
-- INDEX: 0.18 s

SELECT A.time, A.objectId, B.x, B.y
FROM
(
SELECT max(time) as time, objectId
FROM Info
GROUP by objectId
) as A
INNER JOIN Info B
ON A.objectId = b.objectId AND A.time = b.time;

在一定程度上,where 似乎优于 inner join

最佳答案

SELECT A.time, A.objectID, B.X, B.Y
FROM
(
SELECT max(time) as time, objectID
FROM table
GROUP by objectID
) as A
INNER JOIN table B
ON A.objectID = b.objectID AND A.Time = b.Time

投票者,如果 x 和 y 在时间线中的任何一点递减,解决方案将不起作用。

关于mysql - 帮忙写个query : Confusion over order of operations of GROUP BY and ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/236778/

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