gpt4 book ai didi

mysql - 如何为我的表中的多个代码选择最新行?

转载 作者:行者123 更新时间:2023-11-29 13:49:04 25 4
gpt4 key购买 nike

我有一个包含以下各列的表:ID(PK、自动增量)、行、Line_Cod、纬度、经度、时间(时间戳自动)。

每一行都包含某一时刻某条线路(公交车号)的坐标,但是,我们有不同的公交车具有相同的线路号,我们通过它们的线路代码(Line_Cod)来区分它们。

因此,例如,我们可以在表中包含下一行:

Table image

我想要选择的是每辆公交车的最后一个位置,由它们的线路号标识,但要区分它们的line_cod。在上面的示例中,如果我查找第 50 行,我想获取 id 1,3 和 6(不是 2,因为它与 6 是同一总线,但是较旧的记录)。

我知道如何仅选择一行的最新行:

SELECT LINE, LINE_COD, LATITUDE, LONGITUDE, 
CONVERT_TZ( TIME, '+00:00', '+07:00' ) AS 'TIME'
FROM LOCATION
WHERE LINE = 50
ORDER BY TIME DESC
LIMIT 1;

但这只会给我所有的最新记录,无论 Line_COD...

我在所有数据库领域都是新手,任何有关如何实现这一目标的帮助将不胜感激。

最佳答案

我还没有测试过这个查询,但是,你可以这样做:

SELECT * FROM 
(SELECT LINE, LINE_COD, LATITUDE, LONGITUDE,
CONVERT_TZ( TIME, '+00:00', '+07:00' ) AS 'TIME'
FROM LOCATION
WHERE LINE = 50
ORDER BY TIME DESC) L GROUPBY L.LINE
LIMIT 1;

基本上,您需要按 LINE 对行进行分组以消除重复项。但是,您不能在 MySQL 中的单个查询中进行 groupby 和 orderby,因此您需要创建一个子查询来首先按时间选择和排序项目,然后按 LINE 对该表进行分组以消除重复项。

编辑:

您还可以尝试 SELECT DISTINCT。然而,问题是你不能选择多个字段,否则你的结果将不是唯一的,据我记得当我遇到类似问题时。不过,也许我当时错过了一些东西。

显示结果的所有行而不是最后一行。另外,我刚刚意识到您想通过 LINE_COD 而不是 LINE 来区分。所以这是最终的查询:

SELECT * FROM 
(SELECT LINE, LINE_COD, LATITUDE, LONGITUDE,
CONVERT_TZ( TIME, '+00:00', '+07:00' ) AS 'TIME'
FROM LOCATION
WHERE LINE = 50
ORDER BY TIME DESC) L GROUPBY L.LINE_COD;

关于mysql - 如何为我的表中的多个代码选择最新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973464/

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