我有一个包含下一列的表:ID(PK,AutoIncrement),Line,Line_Cod,纬度,经度,时间(Timestamp Auto)。
每一行都包含某一时刻某条线(公交车号码)的坐标,但是,我们有不同的公交车具有相同的行号,我们用它们的线路代码(Line_Cod)区分它们。
因此,例如,我们可以在表格中包含下一行:
我想要选择的是每个总线的最后位置,由其行号标识,但区分他们的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 ......
我在所有数据库领域都很陌生,任何有关如何实现这一目标的帮助都将受到青睐。
答案 0 :(得分:1)
我没有测试过这个查询,但是,你可以这样做:
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;
基本上你需要按行对行进行分组以消除重复。但是,您不能在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;