グループ集計で最小(最大)値を持つ行のみ取得するSQL(その2)

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

「グループ集計で最小(最大)値を持つ行のみ取得するSQL」にて抽出されたデータでグループとして最小値が複数存在する場合もあると思います。
更に1行限定したい場合(あるのかなぁ・・・)を考えてみました。


テーブルには下記のようにデータが入力されていたとします。
Type 列をグループとして Value の値が最小値を取得する場合、該当するデータは太字のデータとなります。さらに今回は、ID 値が最小値のデータとして Type グループで1行限定したときは、背景色がグレーのデータとなります。

Type ID Name Value
1 1 AAA1 20
1 2 AAA2 10
2 1 BBB1 30
2 4 BBB4 10
2 3 BBB3 20
1 3 AAA3 10
2 2 BBB2 10

実際のSELECT文は下記のような感じです。

SELECT
	T1.*
FROM  Test T1
	JOIN (
		SELECT
			A.Type, MIN(A.ID) AS ID
		FROM  Test  A
		WHERE  NOT EXISTS  (
			SELECT  *
			FROM  Test
			WHERE  Type=A.Type
			AND  Value< A.Value
		)
		GROUP BY A.Type
		) T2
	ON T2.Type=T1.Type
	AND T2.ID=T1.ID

Value 値の最小値として取得したデータの中から更に ID 値の最小を求めキー値を取得し、全データと結合してグループ内1行を特定しました。
結合ではなく EXISTS でも良いかもしれません。
1行限定する為にどの列を使うかでSQLは変わると思いますが、参考にはなるかと思います。

関連記事:

Pocket
Bookmark this on Delicious
Bookmark this on Google Bookmarks

カテゴリー: SQL

コメントを残す

メールアドレスが公開されることはありません。


*

This blog is kept spam free by WP-SpamFree.