如何使用distinct和limit一起使用

时间:2012-06-07 10:02:59

标签: mysql

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

如何进行此类查询?

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

3 个答案:

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