[SQL Server]データテーブル内最新の情報のみを表示させる 説明編
今回の記事はSQLserver内での記述です。
前回の記事の詳細説明です。
最新のデータのみを表示させたい場合のselect文です。
例
テーブル名 テストテーブル
コード seq その他データ・・・・・
001 1 --- --- ---
001 2 --- --- --- の場合
002 1 --- --- ---
前回の記事の詳細説明です。
最新のデータのみを表示させたい場合の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 --- --- ---
説明
※列=縦一列
※行=横一行
select 列名1, 列名2
from テーブル名・・・
テーブルから列名を選んで表示します。よく使います。
from テーブル名 as 略称・・・
テーブル名を略称で使うための宣言?。テーブルが複数になった時にselect句で列名を指定するとき、どのテーブルの列名かを select 略称1.列名 , 略称2.列名 というように表せるようになります。また、同じテーブルでも別名をつけて、別のテーブルとして扱うことが出来ます(こちらの役割の方が重要)。
select 元列名 as 変更後列名・・・
from句のasとは違い、表に表示される列名を変更する、あるいは集計の結果など列名の無いものを名付けます。
from (select~~~~
from~~~~~)・・・
サブクエリと言います。()内で事前に条件を絞った表を仮に作ることが出来ます。from句以外の中でも使えます。
select 集計基準列名 , MAX(計算対象列名) as 列名
from テーブル名
group by 集計基準列名・・・
今回のサブクエリの中身です。テーブルから、group byで指定した集計基準列でまとめて、それごとにselect句内の集計関数(ここではMAX())で、計算対象列を計算します。MAX(seq)では、グループごとにseqの最大値を出します。グループは集計基準列、ここではコードの値が同じものごとに'集'めて'計'算します。計算された列MAX(seq)はこの時点で列名が無いので、asで名付けています。select ~~~~~
from テーブル名1 as 略称1
left join テーブル名2 as 略称2 on
order by convert (integer, test.コード)
結果下のように表示されます。
コード seq その他データ・・・・・
001 2 --- --- ---
002 1 --- --- ---
説明
※列=縦一列
※行=横一行
select 列名1, 列名2
from テーブル名・・・
テーブルから列名を選んで表示します。よく使います。
from テーブル名 as 略称・・・
テーブル名を略称で使うための宣言?。テーブルが複数になった時にselect句で列名を指定するとき、どのテーブルの列名かを select 略称1.列名 , 略称2.列名 というように表せるようになります。また、同じテーブルでも別名をつけて、別のテーブルとして扱うことが出来ます(こちらの役割の方が重要)。
select 元列名 as 変更後列名・・・
from句のasとは違い、表に表示される列名を変更する、あるいは集計の結果など列名の無いものを名付けます。
from (select~~~~
from~~~~~)・・・
サブクエリと言います。()内で事前に条件を絞った表を仮に作ることが出来ます。from句以外の中でも使えます。
select 集計基準列名 , MAX(計算対象列名) as 列名
from テーブル名
group by 集計基準列名・・・
今回のサブクエリの中身です。テーブルから、group byで指定した集計基準列でまとめて、それごとにselect句内の集計関数(ここではMAX())で、計算対象列を計算します。MAX(seq)では、グループごとにseqの最大値を出します。グループは集計基準列、ここではコードの値が同じものごとに'集'めて'計'算します。計算された列MAX(seq)はこの時点で列名が無いので、asで名付けています。select ~~~~~
from テーブル名1 as 略称1
left join テーブル名2 as 略称2 on
略称1.列名 = 略称2.列名・・・
結合と言います。left join ではテーブル1を基準にテーブル2を結合します。基準というのは分かりづらいですが、最初に記述したテーブル1に存在しない行は、テーブル2にあったとしても表示しないという動きになります。最後の=は、結合の基準になる数値の列を指定して紐づけしています。ここで指定した列と列の、同じ数値に対応して繋がり、一つの行になります。今回はandで繋げて紐付けする列を増やしています(片方だけだと被る数値があるため)。
order by convert (型名, 列名)・・・order byは並び替えをしてくれます。デフォルトで昇順。convertでは指定した列のデータ型を変換。ここでは文字列型だったコード列を、integerで数値型にしています。数値型にすることで昇順の並び替えが正確に行われます。
結合と言います。left join ではテーブル1を基準にテーブル2を結合します。基準というのは分かりづらいですが、最初に記述したテーブル1に存在しない行は、テーブル2にあったとしても表示しないという動きになります。最後の=は、結合の基準になる数値の列を指定して紐づけしています。ここで指定した列と列の、同じ数値に対応して繋がり、一つの行になります。今回はandで繋げて紐付けする列を増やしています(片方だけだと被る数値があるため)。
order by convert (型名, 列名)・・・order byは並び替えをしてくれます。デフォルトで昇順。convertでは指定した列のデータ型を変換。ここでは文字列型だったコード列を、integerで数値型にしています。数値型にすることで昇順の並び替えが正確に行われます。
コメント
コメントを投稿