Accessで最新の2件の日付を取得する方法

このQ&Aのポイント
  • Accessでテーブルから最新の2件の日付を取得する方法について解説します。
  • 具体的には、IDごとに最新の日付を2件ずつ抽出する方法をご紹介します。
  • クエリを使用して、目的の結果を簡単に得ることができます。
回答を見る
  • ベストアンサー

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

  • fns
  • お礼率25% (1/4)

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

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

IDごとにそれぞれ2件ずつ表示させたいということですね。先程のクエリに別のクエリを以下のとおり差分で最大を出せば2件目の最大が抽出されますので1回目に抽出したファイルとマージして1つのテーブルにすればできます。 SELECT テーブル1.ID, Max(テーブル1.日付) AS 日付の最大1 INTO 抽出2 FROM テーブル1 LEFT JOIN 抽出 ON (テーブル1.ID = 抽出.ID) AND (テーブル1.日付 = 抽出.日付の最大) GROUP BY テーブル1.ID, 抽出.ID HAVING (((抽出.ID) Is Null)) ORDER BY テーブル1.ID; クエリは3回実行することになりますが、マクロで実行すれば簡素化できます。

fns
質問者

お礼

ありがとうございました。とても助かりました。

その他の回答 (3)

回答No.3

抽出するのであれば、 例えば、項目はID、日付でテーブル名はテーブル1とした場合 SQLビューで書けば SELECT テーブル1.ID, Max(テーブル1.日付) AS 日付の最大 INTO 抽出 FROM テーブル1 GROUP BY テーブル1.ID ORDER BY テーブル1.ID; テーブル2というテーブル名で抽出されます。 こうすれば如何でしょう。

fns
質問者

補足

回答ありがとうございます。 さっそく試したみたのですが、それぞれのIDの最大値1件分のみ表示されました。 すみません。説明不足でした。 IDごとにそれぞれ2件ずつ表示させたいのです。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

実行性能は分かりませんが、以下でどうでしょう SELECT T1.* FROM テーブル名 AS T1 WHERE T1.日付 IN (SELECT TOP 2 Q1.日付 FROM テーブル名 AS Q1 WHERE Q1.ID = T1.ID ORDER BY Q1.日付 DESC) ORDER BY T1.ID, T1.日付 DESC; ※ 2か所のテーブル名は、実際のものに置き換えてください

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

1. IDでグループ化て最大日付を求めたクエリーを作成 2. 上記で作成したクエリーと一致するレコードを除いたもので1.同様にIDでグループ化、最大日を求めるクエリーを作成 3. 1.と2.で作成した物をUNIONクエリーで読み込む こうすれば出来ませんか これを1SQLで書くことも出来ると思いますが

fns
質問者

補足

素早いご回答ありがとうございます。 もう少し詳しく教えていただきたいのですが > 2. 上記で作成したクエリーと一致するレコードを除いたもので というのは、不一致クエリなどで作成するのでしょうか?

関連するQ&A

  • アクセス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関数を入れて最新データの抽出をしようとすると、全ての「発送」を除いたデータが抽出されるので、最新データに該当する顧客のデータが消えてしまいます。 なので、本来のコメントデータが分からない状態になります。 また、エクセル側でパラメータクエリを使って資料を作成し、アクセスに触ったことがない人たちが使用するので、アクセスを更新してといったことができません。 なので、更新クエリなどを使ってのやり方以外の方法はないでしょうか? 全くの初心者ですので、言葉足らずで説明が分かり辛くて申し訳ありません。 ご教示をお願いいたします。

  • Access 日付抽出について

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

  • Accessでの抽出について

    Accessでのクエリーでの抽出の方法を教えてください。 たとえば「12345678」といったIDをもたせた人のデータが日付ごとにいくつかレコードがある場合に、クエリーのID欄の抽出条件欄には、「12345678」と入力すれば、その人のデータのみが表示されると思います。 そこで、 (1)その中の日付から、最新のものから3つを抽出したい場合。 (2)その中の日付から、2番目に新しいものを抽出したい場合。 において、クエリーの抽出条件になんて書いたらよいのでしょうか? できましたら、(1)(2)それぞれお答えいただければ幸いです。 どうぞよろしくお願いいたします。

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

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

  • SQLで最新の3件分の統計をとりたい

    お世話になります。 Access2000のSQLを使用しています。 下記のテーブルAから、最新の3件分の結果を取得したいのですが、 どのようにSQLを作成すればよいでしょうか? 誠に勝手ですが、SQL文で回答頂ければ助かります。 ※クエリでも結構ですので教えて頂ければと思います。 以上宜しくお願い致します。 --テーブルA-- 日付  名前 2013/6/1 A 2013/4/1 B 2013/7/1 C 2013/3/1 D --結果B(最新の日付の3つ-- 2013/7/1 C 2013/6/1 A 2013/4/1 B

  • アクセスのテキスト型フィールドの初期値

    アクセスのテーブルにテキスト型フィールド「●●日付」を作成しました。さらに、定型入力の方法として、日付(____/__/__)を指定しています。 このテーブルから、クエリでデータを取得する際、●●日付にデータを入力していないレコードのみを取得したいと思い、クエリの抽出条件として=""(ダブルクォーテーション)や=''(シングルクォーテーション)と記載したのですが、レコードが1件も抽出されません(もちろん●●日付にデータを入れていないレコードは複数あります)。一方で、<>""や<>''で、●●日付にデータが入力されているレコードを抽出しようとした場合は、●●日付にデータが入力されているレコードが抽出されます。 テキスト型フィールドにデータが入力されていないレコードを抽出するクエリはどのようにしたら作成できるのでしょうか?

  • Accessクエリのデータ表示件数について

    テーブルにあるデータを、クエリにより抽出したのですが、テーブルにあるデータ/14328件の内、8414件しか抽出されません(日付フィールドの2000/10/1以降のデータのみ表示される)。クエリに日付等の抽出条件は設定していません。何かデータ表示件数制限等の設定があるのでしょうか?いろいろ試してみましたがダメでした。アドバイス宜しくお願いします。

  • access 日付

    はじめまして。 access(初心者)です。 データを抽出したいのですが、 クエリの抽出条件にどのように条件入力してよいのか 分かりません。 テーブル名:商品マスタ データ  商品No. 開始日   終了日    価格 (1) 100 2008/12/01 2009/06/30 \1,000 (2) 100 2009/07/01 2010/02/01 \1,500 (3) 100 2010/03/01 2010/12/31 \2,000 このテーブルから、例えば、今日=2010/01/04 が含まれているデータを抽出したいのですが。。。 上の例で言うと、答えは(2) 本当すみませんが、教えて下さい。

  • Accessを使って日付を比較したい

    MSofficeのAccessを使用して日付を比較したいのですが上手くいきません。 テーブル1のフィールドには実施日(日付型)、A期間開始日(日付型)、A期間終了日(日付型)があり データ1は2012/04/20、2012/04/15、2012/05/02 データ2は2012/04/25、2012/04/10、2012/04,23と格納されています。 この実施日がA期間に入るかどうかのチェックを行いたいのです。 クエリに入力した関数は IIf(CDate([テーブル1]![A期間開始日])<=CDate([テーブル1]![実施日])>=CDate([テーブル1]![A期間終了日]),"A期間","範囲外") と命令を書きました。 実行させるとデータ1、データ2とも期間外が返されました。 実際、返して欲しいデータはデータ1はA期間、データ2は期間外と表示したいのです。 環境はWindows XP profissional、アクセスは2002 SP3です。 よろしくお願いします。

  • Accessクエリ

    お世話になります。 Access初学者です。 グループごとに日付が最大のレコードを、それぞれ1件抽出するクエリを作成したいと思っています。 IDを表示させなければできるのですが、IDを表示させると全レコードが抽出されます。どのようにすればいいのでしょうか? よろしくお願いします。

専門家に質問してみよう