0

我有一个mysql查询。我需要从表中的 Lat、Lng 列中获取最后一个值,但 serial_number 列需要不同。

如何进行这样的查询?

这是需要的,因为我正在使用此坐标将其加载到 Google 地图。因此,当谷歌地图加载时,我需要在车辆所在的每个最后一个坐标上都有一个标记。

4

3 回答 3

1
SELECT  m.*
FROM    (
        SELECT  DISTINCT serial_number
        FROM    mytable
        ) md
JOIN    mytable m
ON      m.id =
        (
        SELECT  id
        FROM    mytable mi
        WHERE   mi.serial_number = md.serial_number
        ORDER BY
                mi.time DESC, mi.id DESC
        LIMIT   1
        )

为此创建一个索引以(serial_number, time, id)使其快速工作。

如果要检索某个序列号的最后一条记录,只需使用以下命令:

SELECT  *
FROM    mytable
WHERE   serial_number = :my_serial_number
ORDER BY
        time DESC, id DESC
LIMIT   1
于 2012-06-07T10:14:46.340 回答
0

1#假设max ID总是给你最后的lat和lon,查询变得非常简单-

SELECT t2.*
FROM table t2
where t2.id IN 
 (
   SELECT max(t1.id)
   FROM table t1
   GROUP BY t1.serial_number
 )

2#如果你还需要考虑时间,那么你需要这样做。这里,在内部查询中,获得了每个serial_number 的max_time。然后这个 max_time 和 serial_number 分别与外部表 time 和 serial_number 连接,以获得最后一个 lat 和 lon 的不同记录。

SELECT *
FROM table t2, 
 (
   SELECT max(t1.time) max_time, t1.serial_number
   FROM table t1
   GROUP BY t1.serial_number
 ) new_table
WHERE t2.time=new_table.max_time
AND t2.serial_number=new_table.serial_number
于 2012-06-07T10:29:41.453 回答
-1

试试这个

select distinct serial_number, *
from table t
inner join table t1 on t1.serial_number = t.serial_number and t1.id = (select max id from table t2 where t2.serial_number = t1.serial_number)
于 2012-06-07T10:20:08.227 回答