SQLをつかって最新の履歴データに紐づくデータを取得したい場合があると思います。
そのときは以下のようにします。
まず状況としてはA、Bという2つのテーブルがあってBというテーブルのあるフィールドの最新の状態のものを取得したい場合があるとします。
Bは一般的なマスタ、Aは履歴用のデータテーブルです。
①select句の中で副問い合わせをします。このとき取得したいのはBというテーブルのフィールド の値なのでfrom Bとなります。
②この副問い合わせフィールドの中でBのキーとなる項目について、WHERE条件を指定します。
WHERE B.キーフィールド=
というような感じです。
③そしてAテーブルの最新データのうち、Bのキーフィールドに対応するフィールドを取得したSQL文を書き、②の右辺にくっつけます。
以下はその例です。
select
・
・
(
SELECT
B.出力したいフィールド
FROM
B
WHERE
B.キーフィールド = (
SELECT TOP 1
A2.Bのキーフィールドに対応するフィールド FROM
A AS A2
WHERE
A2.HISTORY_DATE <= A.HISTORY_DATE
ORDER BY A2.HISTORY_DATE DESC)
from
A
ミソとしては③のところで、SELECT TOP 1を使用し、ORDER BYで日付に該当するフィールドをDESCし、
AとBをくっつけるために二つに共通するフィールドを使用しているところです。