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

时间:2013-06-06 22:43:49

标签: mysql database timestamp

我有一个包含下一列的表:ID(PK,AutoIncrement),Line,Line_Cod,纬度,经度,时间(Timestamp Auto)。

每一行都包含某一时刻某条线(公交车号码)的坐标,但是,我们有不同的公交车具有相同的行号,我们用它们的线路代码(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 ......

我在所有数据库领域都很陌生,任何有关如何实现这一目标的帮助都将受到青睐。

1 个答案:

答案 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;