SQL:最新の履歴データを取得したい場合のSQL | 人口知能に興味のあるSEのブログ

人口知能に興味のあるSEのブログ

最新IT技術と哲学関係の話題を中心に書いていきます。

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をくっつけるために二つに共通するフィールドを使用しているところです。