この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。
クエリ 最大値をもつレコードの抽出 [クエリ]
テーブルのデータから、ある項目の最大値そのものを抽出するのは、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で書いていった方が早いと思われます。
ありがとうございます!SQLの中にSQL入れられるんですね
by g (2013-12-17 00:44)
gさん、コメントありがとうございます。
ACCESSのクエリでは、サブクエリを利用したい場合、別のクエリとして保存して、それを利用してクエリを作成するのが一般的ですが、SQLを直接書く場合、このようなことも可能です。
by NZ (2013-12-17 01:09)