7

(私は英語を上手に話せませんが、最善を尽くします)

私は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

しかし、私が得た結果は間違っています。すべての行を選択せず​​に何をすべきかわかりません。これは、実際に作成している方法よりも遅い方法です。

何かご意見は?

4

2 に答える 2

0

あなたのシナリオでは、次のクエリが機能するはずです。データがないので試していません。

SELECT
  t1.carid, t2.datetime, t2.lat, t2.lon
FROM
  table1 t1 JOIN table2 t2
  ON t1.carid = t2.carid AND t1.user='user1'
GROUP BY
  carid
HAVING
  t2.datetime=MAX(datetime);

これがうまくいくかどうか教えてください。

于 2013-06-25T15:15:53.230 に答える