SQL 最大値を持つ列を取得

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

前に似たようなエントリを書いた。

とりあえずMySQL上でテストした事を書くけど、MySQL限定の話ではない。

以下のようなテーブル

CREATE TABLE  `test`.`testmax` (
  `ID` int(10) unsigned NOT NULL,
  `DateField` datetime NOT NULL,
  `NumField` int(10) unsigned NOT NULL,
  `Val` double NOT NULL
);

データの中身としては

IDDateFieldNumFieldVal
12007-12-2013
32007-10-0112
32007-10-0124
32007-10-0132.3
32007-11-0113.3
32007-11-0124.1

○やりたい事
各ID毎に最新の日付のレコードの中で最大のNumFieldを持つ値を取り出す。

欲しい結果としては

IDDateFieldNumFieldVal
12007-12-2013
32007-11-0113.3

とりあえずこれが最適かどうかは知らないけど、以前やったのにもう1つiNNER JOINを加えて何とか出来た。SQLって難しい...

SELECT t1.* FROM test.testmax t1
INNER JOIN (
  SELECT t2.ID, t2.DateField, Max(NumField) as MAXNUM FROM test.testmax t2
  INNER JOIN (
    SELECT ID, MAX(DateField) as MAXDATE FROM test.testmax
    GROUP BY ID
  ) as t3
  ON (
    t2.ID = t3.ID
    AND t2.DateField = t3.MAXDATE
  )
  GROUP BY t2.DateField
) as t4
ON (
  t1.ID = t4.ID
  AND t1.DateField= t4.DateField
  AND t1.NumField = t4.MAXNUM
)

トラックバック(0)

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

コメントする

このブログの作者

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

このブログ記事について

このページは、kazuが2008年6月28日 13:58に書いたブログ記事です。

ひとつ前のブログ記事は「BIRTでJavaオブジェクトの埋め込み」です。

次のブログ記事は「JBossからBIRTを使う」です。

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

ウェブページ