「一気に最後まで読んだ」本、教えて下さい!

どなたか、SQLについて教えてください。 条件 以下の中で最大値

どなたか、AccessのSQLについて教えてください。
Accessではなく一般的なSQLでもかまいません。
お願いいたします。

急に仕事でAccessSQLを使用して処理を行わなくてはならなくなりました。
まったくの素人のため、下記の条件で苦戦しております。
どなたか、よろしくお願いいたします。

下記のデータから、
ID 名前 個数
----+-------
AAA あああ 100
BBB いいい 200
CCC ううう 300
DDD えええ 400
EEE おおお 500
----+---------

個数350以下で、更に最大の値の値を求めたいです。

希望結果
---------------
BBB いいい 300
-----------------

個数350以下までは、わかるのですが、更に最大を求める部分がわかりません。

以上、よろしくお願いいたします。

A 回答 (6件)

Accessなら、たぶんこっちのほうが簡単なSQLだと思います。



SELECT TOP 1 * FROM テーブル1
WHERE 個数 <= 350
AND 名前 = "あああ"
ORDER BY 個数 DESC;

個数が350個以下で名前が"あああ"に該当するデータを個数の降順(大きい順)に並べ替え、その中から最初の1件を取得する。

という方法のSQLです。この"TOP n"の記述はAccessのほか、SQL Serverでも可能です。(たぶんMSの方言)
    • good
    • 0
この回答へのお礼

reset_catさん

お礼が遅れてすいません。

ありがとうございました。

お礼日時:2010/03/28 09:12

もう答えでちゃってるけど、一応貼りますよ~。


…前回のはテーブル名抜けてましたね。(-_-;)

select * from [table_name] where 個数 = (
select max(個数) from [table_name] where (個数 <= 350) AND (名前='あああ')
)
    • good
    • 0
この回答へのお礼

lesskeyさん

お教えいただきありがとうございました。

お礼日時:2010/03/28 09:13

補足を良く見たらMAXだけじゃダメでしたね。


先ず、条件として「個数が350以下、名前が'あああ'」
この条件を満たすレコードの中で個数が最大のもの
と、同じレコードを見つける わけですね。

SELECT A.* FROM テーブル AS A
INNER JOIN
(SELECT MAX(個数) AS 最大 FROM テーブル
WHERE 個数<=350 AND 名前='あああ') AS B
ON A.個数=B.最大
WHERE A.名前='あああ'

()内はサブクエリと言い、ここで条件を満たす個数が
最大のものを求めます。→B
このサブクエリの最大個数と個数が一致し、かつ、
名前が「あああ」のものをテーブル(→A)から求め
ます。
    • good
    • 0
この回答へのお礼

nda23 さん

ありがとうございました。

お礼日時:2010/03/28 09:14

単に条件を追加するだけの話です。


SELECT MAX(個数) FROM テーブル
WHERE 個数<=350
AND 名前='あああ'

アポストロフィが付いたり、付かなかったりの
区別は分かりますよね。
また、条件結合はANDです。日本語で言うところの
「条件1で、条件2」は普通、「両方を満たす」と
解釈されます。
    • good
    • 0

単純に「個数が350以下で、最大の個数」を求めます。


SELECT MAX(個数) FROM テーブル
WHERE 個数<=350

この回答への補足

lesskeyさん、nda23さん
教えていただきありがとうございました。
試してみましたら、うまくいきました。

しかし、私の質問内容に不足がございました。
もう少し教えていただけないでしょうか。

下記のデータから、
ID 名前 個数
----+-------
AAA あああ 100
AAA qqq 150
BBB あああ 200
CCC qqq 330
CCC あああ 300
CCC qqq 330
DDD あああ 400
DDD qqq 400
EEE あああ 500
----+---------

名前が”あああ”で、個数350以下で、更に個数が最大の値の値を求めたいです。

希望結果
ID、名前、個数を表示
---------------
CCC あああ 300
-----------------

よろしくお願いいたします。

補足日時:2010/03/22 21:30
    • good
    • 0

こんな感じでは…動作確認する環境がなくて試せてないけども。



select * from 個数 = (
select max(個数) from table where 個数 <= 350
)
    • good
    • 0
この回答へのお礼

lesskeyさん、nda23さん
教えていただきありがとうございました。
試してみましたら、うまくいきました。

しかし、私の質問内容に不足がございました。
もう少し教えていただけないでしょうか。

下記のデータから、
ID 名前 個数
----+-------
AAA あああ 100
AAA qqq 150
BBB あああ 200
CCC qqq 330
CCC あああ 300
CCC qqq 330
DDD あああ 400
DDD qqq 400
EEE あああ 500
----+---------

名前が”あああ”で、個数350以下で、更に個数が最大の値の値を求めたいです。

希望結果
ID、名前、個数を表示
---------------
CCC あああ 300
-----------------

よろしくお願いいたします。

お礼日時:2010/03/22 21:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す