0

わかりました。クエリを実行しているテーブルが 1 つあります。このテーブルには、1 分ごとに更新される履歴データが含まれています。以下を使用して、VehicleKey から最新のデータを取得しています。

SELECT p.VehicleKey, p.Timestamp, p.Latitude, p.Longitude, p.Speed
FROM AVLVehiclePosition p,
    (SELECT max(Timestamp) as maxtime, VehicleKEy
      FROM AVLVehiclePosition
      GROUP BY VehicleKey) maxresults  
WHERE p.VehicleKey = maxresults.VehicleKEy  
AND p.Timestamp = maxresults.maxtime

また、2 番目のテーブルからいくつかの関連情報を取得し、上記のクエリの結果と共に返す必要があります。VehicleKey のすべてのインスタンスについて、VehicleKey によって関連データを取得する方法を見つけました。

SELECT p.Timestamp, p.Latitude, p.Longitude, p.Speed, v.Name, v.VehicleKey
FROM AVLVehiclePosition p, Vehicle v
WHERE p.VehicleKey = v.VehicleKey

今、私は最新の結果のみのためにv.Nameを引っ張っている場所に2つのクエリを結合するために何をすべきかわかりません...

4

2 に答える 2

1

既存のクエリに別の JOIN を追加するだけです。また、ON 句でキーに一致する明示的な (INNER) JOIN を使用すると、WHERE 句でフィルター処理される推論された CROSS JOIN (カンマ区切りのテーブルを使用) と比較して、はるかにクリーンになります。

SELECT p.VehicleKey, p.Timestamp, p.Latitude, p.Longitude, p.Speed, v.Name
FROM AVLVehiclePosition p
JOIN Vehicles v
  ON p.VehicleKey = v.VehicleKey
JOIN (SELECT max(Timestamp) as maxtime, VehicleKEy
      FROM AVLVehiclePosition
      GROUP BY VehicleKey) maxresults  
  ON p.VehicleKey = maxresults.VehicleKEy  
  AND p.Timestamp = maxresults.maxtime

ROW_NUMBER() を使用すると、これをさらにきれいにすることができます。

WITH maxResults AS (
  SELECT p.VehicleKey, p.Timestamp, p.Latitude, p.Longitude, p.Speed, v.Name,
         ROW_NUMBER() OVER (PARTITION BY p.VehicleKey ORDER BY p.Timestamp DESC) rowNum
  FROM AVLVehiclePosition p
  JOIN Vehicles v
    ON p.VehicleKey = v.VehicleKey)
SELECT * FROM maxResults
WHERE rowNum = 1
于 2013-05-07T18:37:54.313 に答える
0

2 つのクエリ間で内部結合を使用します。

SELECT p.VehicleKey, p.Timestamp, p.Latitude, p.Longitude, p.Speed, v.name
FROM AVLVehiclePosition p
    inner join
    (SELECT max(Timestamp) as maxtime, VehicleKEy
      FROM AVLVehiclePosition
      GROUP BY VehicleKey) as maxresults on p.VehicleKey = maxresults.VehicleKEy and p.Timestamp = maxresults.maxtime
    inner join (
     SELECT name, VehicleKey
     from Vehicle) as v ON maxresults.VehicleKey = v.VehicleKey
于 2013-05-07T18:40:10.657 に答える