我有一个mysql查询。我需要从我的表中的Lat,Lng列中获取最后一个值,但serial_number列需要是不同的。
如何进行此类查询?
这是必需的,因为我使用此坐标将其加载到Google地图。因此,当谷歌地图加载时,我需要在车辆所在的每个最后坐标上都有一个标记。
答案 0 :(得分: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)
上创建一个索引,以便快速工作。
如果要检索某个serial_number的最后一条记录,只需使用:
SELECT *
FROM mytable
WHERE serial_number = :my_serial_number
ORDER BY
time DESC, id DESC
LIMIT 1
答案 1 :(得分:0)
1# 假设最大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分别与外部表时间和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
答案 2 :(得分:-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)