[SQL Server]データテーブル内最新の情報のみを表示させる

今回の記事はSQLserver内での記述です。
まず状況の説明です。
データベースのテーブルには
primarykey(主キー:データを識別するコードなど被らないもの)
が2つ設定されている(複合キー)前提です。
一つはコード、一つはseq(シーケンス番号という)。

過去の情報も維持したい場合などにコードのみではなく、シーケンス番号も使います。

データベースのテーブル↓


        コード seq     その他データ・・・・・
  001        1         ---  --- ---
    001        2         ---  --- ---

過去の情報も維持すると、このようにコードが被ります。
普通はコードでレコード(1行)を識別するので、被るとエラーになります。
seqは新しい情報ほど数が大きくなるように登録される前提で、
コードが被っても登録できるように複合キーにしているわけです。

こういった状況での、
最新のデータのみを表示させたい場合のselect文です。


     テーブル名 テストテーブル

        コード seq     その他データ・・・・・
  001        1         ---  --- ---
    001        2         ---  --- --- の場合
    002        1         ---       ---       ---

select  test.コード, test.seq, test2.その他のデータ1,test2.その他のデータ2・・・・
from (select コード,max(seq) as seq
 from テストテーブル
       group by コード)  as test
left join テストテーブル as test2 on
test.コード = test2.コード and test.seq = test2.seq
order by  convert (integer, test.コード)

 結果下のように表示されます。

        コード seq     その他データ・・・・・
    001        2         ---  --- ---
 002        1         ---       ---       ---

コメント

細かい解説は後日します。説明編の記事
流れは、from句の()内(サブクエリ)で、group by でコードごとにseqのMAX値を出すだけのテーブルを作ります。のちにそのテーブルtestに元のテーブルtest2を複合キーによって結合(left join)して、その他のデータを表示させるというものです。

コメント

このブログの人気の投稿

[VB.NET]テキスト等チェンジイベントを有効化・無効化する

[VB.NET]コンボボックスの1アイテムに2つ以上の値を持たせる

[VB.NET]8ケタの文字列を日付に変換する