スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

キーごとに更新日が最大の行取得SQL

むかしこんにゃく工房←スポンサーサイト

例えば、下のようなテーブルがあって、

COL1 COL2 COL3
1 20110401 101
1 20110402 102
1 20110403 103
2 20110501 104
2 20110502 105
2 20110503 106

COL1とCOL2が主キーの時に
COL1ごとでCOL2が最大の行を取得したい時って仕事しててよくある。
つまり下のような結果が欲しい時、

COL1 COL2 COL3
1 20110403 103
2 20110503 106

色々なSQLの書き方が思いつくけど一番シンプルなのは下のような書き方だと思う。

SELECT *
FROM テーブル1 A
WHERE A.COL2=(SELECT MAX(B.COL2) FROM テーブル1 B WHERE B.COL1=A.COL1)
;

最初このSQLを考えた時に分かりにくいって思った。
内部の表で外部の表の列が出てくるとかわけわからん思ったが、順を追って考えてみると、

テーブルの1行目を抽出対象なのか考えた時に、1行目のCOL1=1、COL2=20110401であるので、その時の内部の表だけ考えてみると・・・

SELECT MAX(B.COL2) FROM テーブル1 B WHERE B.COL1=1
となり、内部表COL1が1のときの最大値20110403が返る。

しかし外側のWHERE条件を見てみると、1行目のCOL2は20110401なので不一致となり抽出対象外となる。

という考え方で、6行分考えると分かりやすいかなーって思った。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

syao88

Author:syao88
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
たるいカウンタ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。