0

2 つのテーブル、車両の説明、および移動中の緯度/経度の斜体テーブルがあります。両方のテーブルに Id キー (PK および FK) があります。

私のSELECTは次のようになります

SELECT vehicles.id,          vehicles.description, vehicles.type, 
       positions.time_stamp, positions.latitude,   positions.longitude

       FROM         vehicles
       INNER JOIN   positions 
       ON           vehicles.id=positions.id

そして、各車両について報告された最新の poisiotn の結合値のみが表示されるように、それを ORDER および LIMIT したいと思います。

どうやってやるの?ありがとう


[更新]この SqlFiddle demoを作成しましたが、目的の結果が得られません。

の線に沿って何かが必要だと思います

   ORDER BY     positions.time_stamp DESC
   LIMIT SELECT COUNT(*) FROM vehicles

それが有効な構文であれば:-/


[さらなるアップデート] 物事が実行される順序が気になる人のために:

  1. positionsテーブルからの削除はなく、挿入のみ
  2. 挿入は各車両で数分ごとになります
  3. 私は奇妙な異常なブリップと一緒に暮らすことができますが、これは非常にまれだと思います
  4. 車両の詳細が変更される可能性はほとんどありません。私が行っているのは、新しい場所を追加することだけです。

それはそれをより簡単にしますか?

4

5 に答える 5

1

クエリ:

SQLFIDDLE例

SELECT v.id
     , v.description
     , v.type
     , p.time_stamp
     , p.latitude
     , p.longitude
  FROM positions p
  JOIN vehicles v ON v.id = p.id
WHERE p.time_stamp = (SELECT MAX(l.time_stamp)
                      FROM positions l
                      WHERE l.id = p.id)

結果:

| ID | DESCRIPTION | TYPE |                   TIME_STAMP | LATITUDE | LONGITUDE |
---------------------------------------------------------------------------------
|  1 |     Trabant |  car | April, 19 2013 13:43:12+0000 | 26.77994 | 402.46261 |
|  2 |    Bus # 42 |  bus | April, 19 2013 13:43:12+0000 | 32.77994 |  48.46261 |
于 2013-04-19T13:53:57.893 に答える
1
SELECT v.id, v.description, v.type,
       cur_pos.time_stamp, cur_pos.latitude, cur_pos.longitude
FROM vehicles AS v,
(
    SELECT p.time_stamp, p.latitude, p.longitude
    FROM positions AS p
    WHERE p.id = v.id
    ORDER BY p.time_stamp DESC
    LIMIT 1
) AS cur_pos

同じことを行う他の方法もあります。以下は試みですが、以下のコメントで指摘されているように、元の投稿者が要求したことはしません。参照用にのみ保持しています:

SELECT v.id, v.description, v.type,
       MAX(p.time_stamp), p.latitude, p.longitude
FROM vehicles AS v INNER JOIN positions AS p ON v.id = p.id
GROUP BY v.id, v.description, v.type, p.latitude, p.longitude
于 2013-04-19T03:40:28.647 に答える
1
SELECT v.id, v.description, v.type, p.time_stamp, p.latitude, p.longitude
FROM vehicles v
INNER JOIN positions p ON v.id = p.id
GROUP BY v.id
ORDER BY p.time_stamp DESC
于 2013-04-19T03:34:19.603 に答える