• ベストアンサー

AccessのSQL

次のように同じ日付の中に複数の点数がある場合、 各日の最大点だけを表示するクエリを作りたいのですが、どのようにSQLを書けばよろしいでしょうか? SELECT MAX(点数) , 日付 FROM テーブル; ↑のような文では、エラーになってしまいました・・・ --------------------- 点数 日付 --------------------- 12 2005/11/22 23 2005/11/24 74 2005/11/24 20 2005/11/30 52 2005/11/30 --------------------- 以上、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • arare2005
  • ベストアンサー率31% (63/199)
回答No.5

>クエリに対しては、上記のようなSQLが使えないのでしょうか? 元の日付データは、秒まである詳細なものなので、クエリで元々「Format(date,'yyyy-mm-dd') AS 日付」として出しています。 このクエリを使って、さらにクエリを作ろうとしたのですが。。。。 ・No.4さんのご指摘の通り普通に使えますよ。推測ですが、SQLでの型変換、不必要なリレーションシップ等を設定している為に、判断が出来なくなりエラーが出るのかもしれませんネ(^^; ・再度、ご回答があるかは別にしても、具体的なSQL文を貼り付け、何をどう抽出したいのかを具体的に記載されて方が良いですよ。判っている人からすれば、うまく抽出できる構文しか思いつきませんから。。。(^^; ・気づき…日付をあえてフォーマットし直さなくても、日付型で比較抽出されれば宜しいかと思います。 元々の設計でどうしようもないのかもしれませんが、この様な事を頻繁に行わなければならないのであれば、非効率な処理があちこちで発生します。 元々の日付を文字型8桁などにされた方が良いのかもしれません。 又、クエリをクエリで抽出すると、ご記載の通り不具合が出る事もあると思います。処理の効率化を考えて、一旦途中までのデータをワークDBにでも抽出し、そのDBからクエリを作成するのが良いかもしれませんネ。

ohnotellme
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

#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 句にサブクエリの結果を使っています。

ohnotellme
質問者

お礼

ありがとうございました。 ひっかかっていた場所が分かりました。 ↓でいう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'); ありがとうございました!

すると、全ての回答が全文表示されます。
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

別に作ってあるクエリを使う 別のクエリに日付のフォーマットしたフィールドと点数のフィールドがある場合 SELECT Max([クエリ名].点数) AS 最大点,[クエリ名].日付 FROM [クエリ名] GROUP BY [クエリ名].日付; で出来ませんか?

ohnotellme
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

点数・日付の並びで良ければ SELECT Max(点数) AS 最大点 ,日付 FROM テーブル名 GROUP BY 日付; または SELECT Max(テーブル名.点数) AS 最大点 ,テーブル名.日付 FROM テーブル名 GROUP BY テーブル名.日付; Accessの場合、前者でSQL記述してもJetで自動的に後者の記述になります。

ohnotellme
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 次のような SQL になります。AS 句の後ろは集計フィールド名で、 適当に名付けました。別に指定しなくても ACCESS ではエラーに はなりません。が、本来はつけるべきです。 SELECT MAX([点数]) AS [最高点], [日付]  FROM [テーブル名]  GROUP BY [日付];

ohnotellme
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • arare2005
  • ベストアンサー率31% (63/199)
回答No.1

GROUP BY 日付; 多分(^^;

ohnotellme
質問者

お礼

ありがとうございました。 ご指摘通り、GROUP BYでできました~。

すると、全ての回答が全文表示されます。

関連するQ&A