SQL 最大値を持つ列を取得

| コメント(0) | トラックバック(0)

例えば以下のような製品名、サイズ、値段と最終更新日を入力するテーブルを考える。データはINSERTするのみ。同じ製品でもサイズが違えば値段は違うものとする。

PRODUCTSIZEUPDATEDPRICE
シャツ1L2007-01-012900
シャツ1S2007-01-012900
シャツ1L2007-02-011900
シャツ2S2007-01-014900
シャツ2S2007-02-013900

こっから各製品の現在の値段を一覧を知りたい。PRODUCTとSIZEでGROUP BYして、各グループからUPDATEDが最大の列を選べばいい。

ま、結論から書くとこんな感じ。MySQLの場合だけど、他のDBMSでも大体一緒かと。
SELECT T.* FROM TABLE1 T
INNER JOIN (
  SELECT MAX(UPDATED) AS LAST_UPDATED
  FROM TABLE1
  GROUP BY PRODUCT, SIZE
) AS T2
ON (
  T1.PRODUCT=T2.PRODUCT
  AND T1.SIZE=T2.SIZE
  AND T1.UPDATED = LAST_UPDATED)

ON句に注目って感じ

ちなみにMySQLの場合、上の例でのAS T2をサブクエリーの中のFROM TABLE1の後に付けると、以下のようなエラーになった。

Every derived table must have its own alias
参考にしたのは、このページの5-2の直前に書いてあるSQL。
実際にこのような商品データを扱う場合は当然違うテーブル設計にするけど、今回のSQLの解説のために適当に作ったデータ。

トラックバック(0)

トラックバックURL: http://www.kazu.tv/blog-mgr/mt-tb.cgi/634

コメントする

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このブログ記事について

このページは、kazuが2007年7月18日 08:15に書いたブログ記事です。

ひとつ前のブログ記事は「怪我とか病気をした時」です。

次のブログ記事は「JavaScript、イベントの順序」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ