So-net無料ブログ作成
検索選択

クエリ 最大値をもつレコードの抽出 [クエリ]

 テーブルのデータから、ある項目の最大値そのものを抽出するのは、MAXで簡単に得られますが、その最大値をもつレコード全体を特定したい場合は、ちょっと工夫が必要です。

 例として、下記のようなデータから、最大値をもつレコードを抽出する場合を考えます。

 ぱっと見で、2011/1/9の2,000円が最大です。

 まずは、最大値を求めるSQLを考えます。MAX関数を使用して、下記のようになります。

SELECT Max(金額)
FROM T売上

 このSQLで金額の最大値、2,000が得られます。

 次に、最大値のレコードを抽出する方法を考えます。
 T売上テーブルから、金額が2000のレコード抽出するので、簡単に考えると、下記のようになります。

SELECT 日付 , 金額
FROM T売上
WHERE 金額 = 2000

 金額の条件が決め打ちなんで、考えやすいですが、実際は固定ではありません。
 ここに、先ほどの最大値を求めるSQLを入れます。

SELECT 日付, 金額
FROM T売上
WHERE 金額 = ( SELECT MAX( 金額 ) FROM T売上 )

 こんなふうに、WHERE句で、「項目=」の比較対象を、SELECTの結果から持ってくる事ができます。ただし、この場合は、SELECTの結果が1件である必要があります。
 複雑なSQLは、ばらばらにして考えると、組みやすくなると思います。
 そしてそのうち100行くらいのSQL文も書けるようになります・・・。

 結果は下図のとおり。

 この例では、金額が2,000円のレコードが1件しかないので、結果も1件ですが、同一金額のレコードが複数ある場合は、当然結果も複数件になります。
 処理によっては、結果が1件でないと不都合がある場合などは、日付をMINやFIRSTにして、いずれかが選択されるようにしたら良いと思います。

 ちなみに、クエリのデザインの画面で見ると、下図のようになります。

 大概のSQLは、クエリのデザインで作成することができるようですが、複雑なSQLは、デザインでどう作ったら良いかを考えるより、最初っからSQLで書いていった方が早いと思われます。



【2万円から3万円の、格安ホームページ作成サービス】

nice!(0)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

g

ありがとうございます!SQLの中にSQL入れられるんですね
by g (2013-12-17 00:44) 

NZ

gさん、コメントありがとうございます。

ACCESSのクエリでは、サブクエリを利用したい場合、別のクエリとして保存して、それを利用してクエリを作成するのが一般的ですが、SQLを直接書く場合、このようなことも可能です。
by NZ (2013-12-17 01:09) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました