(私は英語を上手に話せませんが、最善を尽くします)
私は2つのテーブルを持っています。
表1
id carid ユーザー ---------------------- 1 | A001 | ユーザー1 2 | A002 | ユーザー1 3 | A003 | ユーザー2 4 | A002 | ユーザー3
テーブル2
id carid datetime lat lon -------------------------------------------------- -- 1 | A001 | 2013-25-06 10:00:00 | -23.0000 | -46.0000 2 | A002 | 2013-25-06 10:01:00 | -24.3500 | -45.3200 3 | A002 | 2013-25-06 10:02:00 | -24.3800 | -45.3300 4 | A001 | 2013-25-06 10:05:00 | -23.0500 | -46.1000 5 | A003 | 2013-25-06 10:07:00 | -24.3500 | -45.3200 6 | A001 | 2013-25-06 10:10:00 | -23.0700 | -46.1200
日時順に並べられた「user1」から個別のレジストリ「carid」をそれぞれ選択する必要があります
私が必要とする結果:
カリード日時緯度経度 -------------------------------------------------- A001 | 2013-25-06 10:10:00 | -23.0700 |-46.1200 A002 | 2013-25-06 10:02:00 | -24.3800 |-45.3300
私が実際に作成している方法は、必要なユーザーからすべての「carid」を選択し、.net を介して各行を個別に選択することです。
`SELECT carid FROM table1 where user = “user1”;`
カリード ----- A001 A002
次に、必要な行を選択します。
SELECT * FROM table2 WHERE car_id='A001' ORDER BY datetime DESC limit 1
SELECT * FROM table2 WHERE car_id='A002' ORDER BY datetime DESC limit 1
しかし、そのユーザーからのレジストリ「carid's」の数に応じて、多くのクエリを実行する必要があります。私がやっている方法を改善する単一の SELECT でこれを行うことが可能かどうかはわかりませんが、それが私が試したことです:
SELECT car_id, datetime, lat, lon from table1
INNER JOIN table2 on carid = car_id
WHERE user = 'user1'
GROUP BY carid
ORDER BY datetime DESC;
結果:
カリード日時緯度経度 -------------------------------------------------- ---- A002 | 2013-25-06 10:01:00 | -24.3500 | -45.3200 A001 | 2013-25-06 10:02:00 | -23.0000 | -46.0000
そして、私もこれを試しました:
SELECT car_id, MAX(datetime) as datetime, lat, lon from table1
INNER JOIN table2 on carid = car_id
WHERE user = 'user1'
GROUP BY carid
ORDER BY datetime DESC;
結果:
カリード日時緯度経度 -------------------------------------------------- ---- A001 | 2013-25-06 10:10:00 | -23.0000 | -46.0000 A002 | 2013-25-06 10:02:00 | -24.3500 | -45.3200
しかし、私が得た結果は間違っています。すべての行を選択せずに何をすべきかわかりません。これは、実際に作成している方法よりも遅い方法です。
何かご意見は?