• ベストアンサー

最新の日付を持つレコードと結合したい。

SQLserver2005環境です。 AとB、2つのテーブルを結合しようと考えています。 Bはキーを持たないテーブルです。 仮にですが テーブルA ID --- 1 2 3 テーブルB ID    時間 --- 1    12:00 1    13:00 2    10:00 3    11:00 3    12:00 3    15:00 のようになっていた場合、Bテーブルの一番新しい日付のもののみと 結合したいと考えています。 なので、上の例だと、結合後 ID    時間 --- 1    13:00 2    10:00 3    15:00 となるようにしたいのです。 実際のテーブルにはIDや時間の他にも様々な値があり、ID以外の値が 違うレコードであっても、IDが同じであれば、最新のレコードのみ 結合対象にするような仕様です。 (なのでGroup Byを使うと実現できない?) イメージとしては、結合する際に、on句でより新しいほうを、という条件を 指定できたらなぁと思っているんですが、うまく作れず困っています。 ご教授いただけないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

別解です。相関サブクエリを使って最新のものだけ抽出する方法です。 SELECT DISTINCT A.ID,B.時間 FROM テーブルA a INNER JOIN テーブルB B ON B.ID=A.ID WHERE B.時間 IN (SELECT MAX(時間) FROM テーブルB WHERE ID=B.ID)

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

サブクエリを使うのではないでしょうか SELECT A.* FROM テーブルB AS A JOIN (SELECT X.ID,Max(X.時間) XT FROM テーブルB AS X GROUP BY X.ID) AS B ON (A.ID=B.ID AND A.時間=B.XT)

回答No.1

私が使っているデータベースが異なりますので実装は異なると思います。 Bがテキストデータ(シーケンシャル)のようですので、1回読み込ませないと較べるのは難しいと思います。SQLでIDと時刻のみのワークファイルを生成し、ワークファイルのキーをID+時刻(降順)の最初のIDでAに書き込めばよいと思います。ワークファイルはファイルロックの高速アクセスに設定すれば早く書けると思います。

関連するQ&A