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


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

TypeIDNameValue
11AAA120
12AAA210
21BBB130
24BBB410
23BBB320
13AAA310
22BBB210

実際の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は変わると思いますが、参考にはなるかと思います。

カテゴリー: SQL

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*