私はmysqlクエリを持っています。テーブルの Lat,Lng 列から最後の値を取得する必要がありますが、serial_number 列は異なる必要があります。
そのようなクエリを作成するにはどうすればよいですか?
この座標を使用してGoogleマップにロードしているため、これが必要です。そのため、Google マップが読み込まれるときに、車両が存在する最後の各座標にマーカーを付ける必要があります。
私はmysqlクエリを持っています。テーブルの Lat,Lng 列から最後の値を取得する必要がありますが、serial_number 列は異なる必要があります。
そのようなクエリを作成するにはどうすればよいですか?
この座標を使用してGoogleマップにロードしているため、これが必要です。そのため、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)
。
特定の serial_number の最後のレコードを取得する場合は、次のようにします。
SELECT *
FROM mytable
WHERE serial_number = :my_serial_number
ORDER BY
time DESC, id DESC
LIMIT 1
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
これを試して
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)