プロが教えるわが家の防犯対策術!

次のように同じ日付の中に複数の点数がある場合、
各日の最大点だけを表示するクエリを作りたいのですが、どのようにSQLを書けばよろしいでしょうか?

SELECT MAX(点数) , 日付 FROM テーブル;

↑のような文では、エラーになってしまいました・・・

---------------------
点数日付
---------------------
122005/11/22
232005/11/24
742005/11/24
202005/11/30
522005/11/30
---------------------


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

A 回答 (6件)

>クエリに対しては、上記のようなSQLが使えないのでしょうか?


元の日付データは、秒まである詳細なものなので、クエリで元々「Format(date,'yyyy-mm-dd') AS 日付」として出しています。
このクエリを使って、さらにクエリを作ろうとしたのですが。。。。

・No.4さんのご指摘の通り普通に使えますよ。推測ですが、SQLでの型変換、不必要なリレーションシップ等を設定している為に、判断が出来なくなりエラーが出るのかもしれませんネ(^^;

・再度、ご回答があるかは別にしても、具体的なSQL文を貼り付け、何をどう抽出したいのかを具体的に記載されて方が良いですよ。判っている人からすれば、うまく抽出できる構文しか思いつきませんから。。。(^^;

・気づき…日付をあえてフォーマットし直さなくても、日付型で比較抽出されれば宜しいかと思います。
元々の設計でどうしようもないのかもしれませんが、この様な事を頻繁に行わなければならないのであれば、非効率な処理があちこちで発生します。
元々の日付を文字型8桁などにされた方が良いのかもしれません。

又、クエリをクエリで抽出すると、ご記載の通り不具合が出る事もあると思います。処理の効率化を考えて、一旦途中までのデータをワークDBにでも抽出し、そのDBからクエリを作成するのが良いかもしれませんネ。
    • good
    • 0
この回答へのお礼

すっかりハマってしまいましたが、なんとかできました。
「グループ化や集計に関係のないフィールドを表示する」のが、普通はできないということが理解できておらず、そこにひっかかっていたようです。。。

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

お礼日時:2005/12/05 19:51

#2 です。



> クエリで元々「Format(date,'yyyy-mm-dd') AS 日付」として...

date ってフィールド名? それとも関数? 予約語みたいなので、エラーの心配
がありますね、、
もし、フィールド名なら SQL ではそれを明示的に [ ] を付けてみて下さい。

それから、 Format を含む SQL を見せていただけると話が早そうですよ。



それでは、、、

元のテーブルで「秒まである詳細なもの」のフィールド名を「元日付」とするな
ら、次のような SQL か、またはサブクエリを使うかです。

下記の SQL でテーブル名やフィールド名をご自分で書き換えて、SQL ビューに
貼り付けてみて下さい。


SELECT Max([点数]) AS [最高点], Format$([元日付],'yyyy-mm-dd') AS [日付]
 FROM [テーブル名]
 GROUP BY Format$([元日付],'yyyy-mm-dd');


参考)別解:サブクエリ

SELECT MAX([点数]) AS 最高点, [日付]
 FROM (SELECT [点数], Format$([元日付],'yyyy/mm/dd') AS [日付] FROM [テーブル名])
 GROUP BY [日付];

※ FROM 句にサブクエリの結果を使っています。
    • good
    • 0
この回答へのお礼

ありがとうございました。
ひっかかっていた場所が分かりました。
↓でいうnameで引っかかっていたようです・・・

SELECT Max(テーブル1.score) AS 点数の最大, Format([date],'yyyy-mm-dd') AS 日付, First(テーブル1.name) AS 名前
FROM テーブル1
GROUP BY Format([date],'yyyy-mm-dd');

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

お礼日時:2005/12/05 19:54

別に作ってあるクエリを使う


別のクエリに日付のフォーマットしたフィールドと点数のフィールドがある場合

SELECT Max([クエリ名].点数) AS 最大点,[クエリ名].日付
FROM [クエリ名]
GROUP BY [クエリ名].日付;

で出来ませんか?
    • good
    • 0
この回答へのお礼

ありがとうございました!
できました。
というより、問題は他にあったようです・・・

お礼日時:2005/12/02 22:02

点数・日付の並びで良ければ



SELECT Max(点数) AS 最大点 ,日付
FROM テーブル名
GROUP BY 日付;
または
SELECT Max(テーブル名.点数) AS 最大点 ,テーブル名.日付
FROM テーブル名
GROUP BY テーブル名.日付;

Accessの場合、前者でSQL記述してもJetで自動的に後者の記述になります。
    • good
    • 0
この回答へのお礼

ありがとうございます!

ご指摘どおり行ったら、できました。
ただし、サンプルで作ったテーブルに対してはできるのですが、もともと適用したかったクエリーでは、ダメでした。。。
下の方への質問とかぶりますが、クエリに対してクエリを作るときは、何か制限があるんでしょうか。。。。

お礼日時:2005/12/01 22:11

こんにちは。

KenKen_SP です。

次のような SQL になります。AS 句の後ろは集計フィールド名で、
適当に名付けました。別に指定しなくても ACCESS ではエラーに
はなりません。が、本来はつけるべきです。

SELECT MAX([点数]) AS [最高点], [日付]
 FROM [テーブル名]
 GROUP BY [日付];
    • good
    • 0
この回答へのお礼

ありがとうございます!

教えていただいた方法でできたのですが、
クエリに対して上記SQLを使ってクエリを使おうとすると、失敗してしまいます。

クエリに対しては、上記のようなSQLが使えないのでしょうか?
元の日付データは、秒まである詳細なものなので、クエリで元々「Format(date,'yyyy-mm-dd') AS 日付」として出しています。
このクエリを使って、さらにクエリを作ろうとしたのですが。。。。

お礼日時:2005/12/01 22:09

GROUP BY 日付;



多分(^^;
    • good
    • 0
この回答へのお礼

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

ご指摘通り、GROUP BYでできました~。

お礼日時:2005/12/01 22:04

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