我有一个mysql查询。我需要从表中的 Lat、Lng 列中获取最后一个值,但 serial_number 列需要不同。
如何进行这样的查询?
这是需要的,因为我正在使用此坐标将其加载到 Google 地图。因此,当谷歌地图加载时,我需要在车辆所在的每个最后一个坐标上都有一个标记。
我有一个mysql查询。我需要从表中的 Lat、Lng 列中获取最后一个值,但 serial_number 列需要不同。
如何进行这样的查询?
这是需要的,因为我正在使用此坐标将其加载到 Google 地图。因此,当谷歌地图加载时,我需要在车辆所在的每个最后一个坐标上都有一个标记。
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
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
试试这个
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)