0

私はmysqlクエリを持っています。テーブルの Lat,Lng 列から最後の値を取得する必要がありますが、serial_number 列は異なる必要があります。

そのようなクエリを作成するにはどうすればよいですか?

この座標を使用してGoogleマップにロードしているため、これが必要です。そのため、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)

特定の serial_number の最後のレコードを取得する場合は、次のようにします。

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# 最大 ID が常に最後の緯度と経度を与えると仮定すると、クエリは非常に単純になります -

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 にそれぞれ結合して、最後の緯度と経度を含む個別のレコードを取得します。

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 に答える