• ベストアンサー

ACCESS 一番最新の日付の金額を出したいのですが・・

社員ID/交通費/登録日 のフィールドがあるテーブルがあります。 社員ID/交通費/登録日 0001  800  2007/4/1 0002  400  2007/4/2 ・ ・ 0001 700  2007/5/2 となった場合、0001の人は700円と言う風に登録日が最新のものを抽出したいのですが クエリをつくり登録日の集計を「最大」にしてみたら、日付は5/2がちゃんと出ますが、金額がその登録日以外の金額になるのです。 どうすればよいでしょうか? 分かる方教えて下さい。宜しくお願いします。  

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

  • ベストアンサー
noname#140971
noname#140971
回答No.4

SQL文とクエリは同じです。 フィールド:登録日 テーブル:TEST 並び替え: 表示: 抽出条件:DLOOKUP("MAX(登録日)","TEST","社員ID=" & 社員ID); または: フィールド:登録日 テーブル:TEST 並び替え: 表示: 抽出条件:(SELECT MAX(登録日) FROM TEST AS B WHERE TEST.社員ID=B.社員ID) または: このように、クエリを編集すれば良いということです。 ですから、事実上は、"TEST" だけを実際のテーブル名、クエリ名に置き換えるだけです。

meatoffice
質問者

お礼

いつもご丁寧な回答嬉しいです。 教えていただいたとおりにして出来ました。 本当にありがとうございます。

その他の回答 (4)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.5

>登録日の更新条件欄というのはどこにあるのでしょうか それはそれで別に設定してください

noname#140971
noname#140971
回答No.3

<TEST> ID___社員ID___交通費___登録日 1____101___________\100___2007/01/01 2____102___________\200___2007/02/02 3____101___________\300___2007/03/03 4____102___________\110___2007/04/04 5____101___________\220___2007/05/05 <クエリ1> 4____102___________\110___2007/04/04 5____101___________\220___2007/05/05 一番簡単なのは、その行の[社員ID]のMAX(登録日)と一致する[登録日]の行を SELECT すること。 SELECT * FROM TEST WHERE 登録日=DLookup("MAX(登録日)","TEST","社員ID=" & 社員ID); もちろん、DLookup 関数の部分を SQL文で書くことも可能です。 × SELECT * FROM TEST WHERE 登録日=(SELECT MAX(登録日) FROM TEST WHERE 社員ID=社員ID); ○ SELECT * FROM TEST AS A WHERE 登録日=(SELECT MAX(登録日) FROM TEST AS B WHERE A.社員ID=B.社員ID); 単にDLookup 関数の部分をSQL文にしても正しい結果は得られません。 その行の[社員ID]を、A.社員ID で表現する工夫。 最大値の検索対象としての[社員ID]を、B.社員ID で表現する工夫。 などが必要となります。

meatoffice
質問者

お礼

回答ありがとうございます。 ですがSQLは私にはちょっと難しい回答だったので、解決できませんでした・・ いつも丁寧に回答くださりありがとうございます。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

登録日の更新条件欄に In (select max(登録日) from テーブル名 as A where A.社員ID=テーブル名.社員ID) テーブル名にはそちらのテーブル名を Aはそのままでいいです

meatoffice
質問者

お礼

回答ありがとうございます。 登録日の更新条件欄というのはどこにあるのでしょうか・・・すみません。その辺もまだ分かってない初心者なので・・・ もうちょっと勉強してみます。

  • ttk11
  • ベストアンサー率25% (40/154)
回答No.1

理屈の上では 1.選択クエリーの作成 社員idと登録日でsortのため 2.上記クエリーを入力としての 集計クエリーを作成    ここでは、グループ用項目は 社員id    交通費のところは 「最後のレコード」とする でできるはずです しかし、ACCESSの集計クエリーは、実際には 自分では想定しないような結果を出すことが多くあります わたしは、バグなのではないかと思っているので 上記のクエリーで、うまく結果が出ない可能性があります そのときはごめんなさいです

meatoffice
質問者

お礼

回答ありがとうございます。 上記のとおりにしてみたのですが、やっぱり日付は最新のものが出るのに金額が出なかったです。

関連するQ&A

  • Access 最新から2件分の日付

    色々と調べたのですが、データが思い通りにならなく困っております。 テーブルの新しい日付から2件を表示したいのですがわかりません。 以下のようなデータがあるのですが ID 日付 1 2009/09/15 1 2009/09/09 1 2009/09/02 2 2009/09/15 2 2009/09/09 IDごとに最新の日付を2件分抽出したいのです。 ID 日付 1 2009/09/15 1 2009/09/09 2 2009/09/15 2 2009/09/09 クエリで、上記のように実現するには、どのようにすればよいのでしょうか? ご指南頂けると助かります。宜しくお願い致します。 環境 OS:XP Access Version:2002

  • Accessの選択クエリから最終日付のデータのみ抽出したい

    Access2002を使用しています。 初心者ですのでよろしくお願いします。 アクセスで選択クエリを作成しました。 このクエリのフィールドは「日付」と「金額」です。 この選択クエリから最終日付のレコードのみを抽出する選択クエリを作製したいのですが、何か方法はありませんでしょうか? 最終日付に対応する金額を抽出したいイメージです。 なお、レコードの作製順番は、必ずしも日付順とはなっていません。(例えば、7/2付でレコードを作成後、7/1付で次のレコードを作製している場合もあります。) 一つの方法として、選択クエリのデザインフォームで集計ボタンを押して日付フィールドの集計項目(グループ化)で「最後」を選択しているのですが、「金額」が全レコード表示されてしまいます。 また、同様にして、金額フィールドの集計項目で「最後」を選択すると、最後に作成したレコードが表示されてしまいます。(上記の例では、7/2ではなく7/1のレコードが表示されます。7/2に対応する金額を抽出したいのですが…) アドバイスよろしくお願いします。

  • Access 初心者です。

    Accessを初めて1か月の超初心者です。 本を見たり、ネットで調べたりしてある程度使える様にはなりましたが、どうしても分からないので質問させて頂きました。 会社の出勤予定表を作成したいのですが、 テーブルで、 1、日付テーブル(ID・日付の2フィールドで日付のフィールドには4年分くらいの日付をexcelからインポートしました。 2、社員テーブル(社員ID・性・住所・・・など) は、あります。 やりたい事は、 (1)縦に社員名、横に日付を、出勤日に○を入力する様にフォームをつくりたい。 (2)それを年月を入力して1か月分のみ抽出したい。 です。 出勤予定表単体なら、社員名・年月・1日~31日のフィールドを作ればいけるのですが、ほかのクエリで顧客数と必要社員数が月検索で一覧表示出来るクエリがあるので、そこに日ごとの社員数の過不足が出るようにしたいので、、、 簡単なことかもしれませんが、全くわかりません。 出勤テーブルをどのように作れば良いか? 日付テーブル・社員テーブル・出勤テーブルをどのようにつなげれば良いか? ご教授お願い致します。

  • クエリで日付ごとに金額で集計したいのに

    サンプルで、テーブルに 日付    金額 2013/06/01    ¥1,000 2013/06/02    ¥1,500 2013/06/01    ¥2,000 というデータを作って、 SELECT [テーブル1].日付, Sum([テーブル1].金額) AS 金額の合計 FROM テーブル1 GROUP BY [テーブル1].日付; このようなクエリを作ると、 日付    金額の合計 2013/06/01    ¥3,000 2013/06/02    ¥1,500 こうなりますよね。 実際のデータで、日付と金額のフィールドだけ、テーブルから持ってきて、 日付はグループ化、金額は合計にしてるのに、 日付がグループ化されていません。 図を見てもらえばわかると思いますが、同じ日なのに合計額が合算されていません。 なぜなのかわかりません。 元のテーブルは、日付は日付型、金額は通貨型です。 サンプルと同じです。 よろしくお願いします。 他のフィールドに主キーがあります。

  • アクセス2010 最新データを抽出する方法

    はじめまして。 アクセスを猛勉強中の初心者です。 過去記事を探しましたが、解決できませんでしたのでご教示お願いします。 やりたいことは、2つのテーブルからクエリを使って、最新のデータを抽出したいです。 ですが、その中に抽出したくないワードが存在します。 それ以外のワードで最新のデータを抽出したいです。 まず、下記のような2つのテーブルがあります。 ●テーブル1        ・ID(主キー)       ・日付 ・コメント ・顧客ID ●テーブル2 ・顧客ID(主キー) ・顧客名 ・住所 次にこのテーブルをクエリにしてデータを返すと、下記のようになります。 日付    コメント      顧客名    ・2/1     保留       Aさん ・2/1     発送       Bさん       ・2/1     相談       Cさん ・2/2    次回未定     Bさん ・2/3     発送       Aさん  ・2/4    次回未定     Dさん        今回抽出したいデータは、「発送」というワードをはぶいた最新のデータをとりたいということです。 なので、データとしては、 日付    コメント      顧客名    ・2/1     保留       Aさん ・2/1     相談       Cさん ・2/2    次回未定     Bさん ・2/4    次回未定     Dさん と、このように抽出したいのです。 最新データの抽出にはMax関数を使ってでき、いらないワードである「発送」はクエリのフィールドの抽出条件に『<>”発送”』と入力することで抽出を防ぐことができたのですが、これらの方法でMax関数を入れて最新データの抽出をしようとすると、全ての「発送」を除いたデータが抽出されるので、最新データに該当する顧客のデータが消えてしまいます。 なので、本来のコメントデータが分からない状態になります。 また、エクセル側でパラメータクエリを使って資料を作成し、アクセスに触ったことがない人たちが使用するので、アクセスを更新してといったことができません。 なので、更新クエリなどを使ってのやり方以外の方法はないでしょうか? 全くの初心者ですので、言葉足らずで説明が分かり辛くて申し訳ありません。 ご教示をお願いいたします。

  • 【Access2010】グループ化について

    お世話になります。 テーブルのグループ化につきましてご教授願います。 あるテーブルに、  ・ID  ・ケースID  ・メモ  ・登録日  ・登録時 というフィールドがあります。 例えば、ケースID:100で抽出すると以下のようになります。 ID ケースID メモ 登録日 登録時 1  100    xxx  2014/05/10 10:00 2  100    xxx   2014/05/10 10:30 3  100    xxx   2014/05/11 10:10 4  100    xxx   2014/05/12 09:20 そこで、当該ケースIDの最終登録日時を求める為、  ケースID:グループ化 (条件 100)  登録日:最大  登録時:最大 というクエリを作成しました。 結果は、 ケースID 登録日  登録時 100    2014/05/12 10:30 となりました(要するに登録日と登録時のそれぞれの最大)。 本来であれば、2014/05/12 09:20が抽出されて欲しいところですが そもそもクエリで2014/05/12 09:20を抽出することは可能なので しょうか。 登録日 & 登録時 にして最大とすればよいかと思うのですが このやり方以外で何かよい方法があればご教授願います。 なお、以下のようなケースもあるので最後のレコードをひっぱって くればよい・・という訳でもありません。 ID ケースID メモ 登録日 登録時 1  100    xxx  2014/05/10 10:00 2  100    xxx   2014/05/10 10:30 3  100    xxx   2014/05/11 10:10 4  100    xxx   2014/05/12 09:20 5  100    xxx 2014/05/11 17:00 以上、宜しくお願い致します。

  • Access 日付抽出について

    Access2000のクエリにて、ある特定日付の抽出ができません。 テーブルの日付項目は、日付/時刻型です。 テーブルを開くと、「2008/02/01 12:59:00」のように見えます。 クエリで抽出する時に、「#2008/02/01#」で抽出されると思って いるのですが、実行すると抽出できません。 どのようにクエリ設定をすればよろしいでしょうか?

  • Access 2003 日付の表示について

    クエリ作成にて 集計する→日付をグループ化する→月を選択しました。 日付 を月でグループ化: Format$([テーブル1].[日付],'mmmm yyyy') となり、表示が February 2010となります。 これを平成22年 2月と表示したいのですが、mmmm yyyyをggge年 m月と変更すると、クエリ式'(Sumテーブル1.量1)'の構文エラー:演算子がありません。となり変更できません。 テーブル構造は フィールド名  データ型 id オートナンバー 日付      日付/時刻型 機械番号    数値型 材質      テキスト型 量1      数値型 量2      数値型 情報が不足していれば追記いたします。

  • 更新クエリで合計金額を入れたい

    アクセスのテーブル1を作成しました。 ID    日付    金額    合計金額 1     6/1     ¥100 2     6/1     ¥200 3     6/2     ¥150 4     6/2     ¥300 (合計金額はカラ) そして、日別の合計を出すクエリ1を作成しました。 SELECT [テーブル1].日付, Sum([テーブル1].金額) AS 金額の合計 FROM テーブル1 GROUP BY [テーブル1].日付; 元のテーブルの合計金額の列に、クエリで表示した金額の合計を更新クエリで入れようとすると、 「 更新可能なクエリであることが必要です。」となります。 更新クエリのSQL文は UPDATE クエリ1 INNER JOIN テーブル1 ON [クエリ1].日付 = [テーブル1].日付 SET [テーブル1].合計金額 = [クエリ1]![金額の合計]; です。 ヘルプの内容の 一対多リレーションシップの '一' 側のフィールドを更新するクエリを実行しようとしました。 読み取り専用で開いているデータベースのクエリで、古い OpenQueryDef メソッドで使用しています。 には該当してないのですが(リレーションシップを組んでないし、四方チリ専用で開いてないし) どうすれば元のテーブルに合計金額を入れられるのでしょうか? 結果的に ID     日付     金額     合計金額 1     6/1     ¥100     300 2     6/1     ¥200     300 3     6/2     ¥150     450 4     6/2     ¥300     450 にしたいです。

  • Access

    初心者なので質問の内容がわかり辛いかも知れませんが教えて下さい。 Accessを使って給与集計をしています。 社員ごとに支払額や交通費などを表示する賃金台帳フォームに、特定の社員だけ給与天引が発生するのでその金額を載せたいのですが、うまくできません。 天引のクエリには 社員ID、購入月、天引金額があります。 EXCELのLOOKUPのように、賃金台帳の社員IDを見て、天引のクエリの中から同じIDを検索し、その月の金額を、賃金台帳のあるフィールドの中に返す・・・ということをしたいのですが、方法はありますか? 分かりづらい質問ですがご回答いただければ助かります。 宜しくお願いします。