• ベストアンサー
  • すぐに回答を!

access2000での抽出条件

DBから選択クエリーを作ってある条件を満たすデータを抽出したいのですが、レコードの量が多くて(10万単位)スぺックの悪いPCなので並べ替えをするにも固まってしまって困っています。 同じ名前を持つレコード群の中で最新の日付のレコードだけを抽出する関数ってありますか? 例えば 発生日,名前,種類,住所,電話番号 の5つのフィールドがあり、その中で同じ"名前"を持つ"発生日"の中で最新の日付だけを抽出する、として教えていただけないでしょうか。 よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数136
  • ありがとう数6

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

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

再度回答します。(最初の回答より掘り下げました) まずクエリーを作ります。(例:クエリー1) select *  ← * にすると全フィールド項目が表示対象となります。 from DB名 where 名前 = 対象にしたい名前 order by 発生日 desc とすると最初の1件目があなたの欲しいデータとなります。(1件抽出にこだわらないなら。。。。) やはり、1件だけ欲しい場合は(少し遅くなる)、 そのクエリーに対して再度クエリーを作ります。(例:クエリー2) select * from クエリー1 group by 発生日,名前,種類,住所,電話番号; とします。 ※いきなり大量データをグループ化にすると遅くなるので、クエリー1で簡単抽出し、クエリー2でグループ化します。win95のaccess95でよくこの技を使いました。 あと比較記号で ≦ より > を記述する方が早くなるとかもあります。 抽出時に、日付で**/**/**などの形式の意識は入りません。 もしアクセス画面表示で形式のこだわった表示がしたいなら、表示項目のプロパティで書式をyyyy/mm/ddとすればいいでしょう。(format関数を使う方法もあるので書き出すときりがない) あとインデックスは貼ることができるなら貼った方がいいです。(方法は前回に回答済)

参考URL:
http://www.e-taiko.co.jp/

共感・感謝の気持ちを伝えよう!

質問者からのお礼

どうもありがとうございます。 今回は時間がなかったので結局社内のexcelマスターにマクロをシコウサクゴしてやってもらってしまいました。情けない… とても分かりやすい説明で理解が出来たので次回からはできそうです。どうもありがとうございました。

関連するQ&A

  • ACCESS2000 クエリの抽出条件

    フィールドに無作為に年月日が入力されているとします。 クエリの抽出条件に>2008/1/1と入力すると「2008年1月1日よりも新しい日付のレコード」を選択できます。 新しい日付の上位25までを選択するためには、抽出条件になんと入力したらいいのでしょうか。あまりにも基本的な質問かもしれませんが、お時間の許す方にお願いします。

  • Access2000 抽出について

    どうしてもわからないので教えてください。 選択クエリで、「フリガナ」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![カナ検索]),"*",[Forms]![F_顧客検索]![カナ検索] & "*") でフォームからクエリを実行させるようにしているのですが、 フリガナが空白のレコードは抽出されてくれません。 「*」でなく、なんと入れればいいのでしょうか? ちなみに他に、「自宅電話番号」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![電話検索]),"*" & "*",[Forms]![F_顧客検索]![電話検索] & "*") など、似たような感じで抽出をかけています。 よろしくお願いします。

  • ACCESS2000でのレコード抽出

    OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。

その他の回答 (3)

  • 回答No.3

クエリーデザインを開き右クリックしSQLビューを開き、直接記述します。 select 最終日付 from DB名 where 名前=対照となる名前 order by 最終日付 desc 後、データベース定義で名前と最終日にインデックスを貼ればいい(重複あり) 私のパソコンで30万件のデータ検索で約4分でした。

参考URL:
http://www.e-taiko.co.jp/

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 うちのsql、規模小さいくせに支社からもみんなでアクセスしているのでやはり直接いじる事を躊躇してしまいました。もし壊したら私のスキルでは自信がないから・・ あと、質問なんですが今回の場合、各名前に対して最終日付(latest day)がバラバラなのですが、その場合は select日付の部分をどう書けばよいのか教えていただけないでしょうか?["00/*/*"or"99/*/*"]で使えますか? すみません,お願いします。

  • 回答No.2
  • poporo
  • ベストアンサー率38% (10/26)

選択クエリなら簡単です。 1.グループ化をする。 2.「発生日」フィールドで「集計方法」を「最大」にする。 これだけでいいと思います。もし、グループ化がまずい場合は、「発生日」フィールドと「名前」フィールドだけのクエリと、「名前」「種類」「住所」「電話番号」フィールドのクエリを作って、ここから「名前」フィールドで繋ぎ合わせたクエリを作るといいと思います。 この場合は、「テーブル作成クエリ」などを利用して、「シリアル番号」フィールドを付け加えた「作業用のテーブル」を作ってしまう方がやりやすいと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

どうもありがとうございました。 チャレンジしてみたのですが結局最後までクエリーは開くことなく、ものすごくアナログにつぎはぎつぎはぎして テーブルを移した後クエリー抽出することで作業をムリヤリ終わらせました。

  • 回答No.1
  • myzard
  • ベストアンサー率43% (68/156)

 具体的な解決策ではないことをあらかじめ お断りしておきます。  レコード数が 10 万単位もあるということですが、 1 つのテーブルにそれだけあるということですよね。 ここはひとつ、データベースの構造を考え直すべきでは ないでしょうか。どのようなデータベースを作って いらっしゃるのか、もっと詳しく書いていただければと 思います。

共感・感謝の気持ちを伝えよう!

質問者からの補足

すみません、説明不足でした。 DB自体はsqlサーバ7.0にあります。 今回はその一部のデータをローカルに移しての作業を行っています。抽出作業自体はaccessで行っています。 一時的なものの為、sqlでの作業は出来るだけ避けたいと思っているので、access内でどうにかしたいのですが・・・。 よろしくお願いいたします。

関連するQ&A

  • Access2000 2番目に大きい数値の抽出

    ランダムに日付の並んだフィールドがあると仮定します。(重複あり) このフィールドの2番目に新しい日付のみのレコードを抽出したいと思いますが、抽出条件にどのように記述するかわかりません。ご存知の方がおりましたら時間の許すときでかまいませんのでご教示ください。

  • ACCESS2000でクエリを抽出条件で抽出

    VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。 抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。 strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'" クエリーのカラム名は全角漢字です。 どこがおかしいのでしょうか? よろしくお願いいたします。

  • ACCESS2000のクエリで、任意の日の時給を抽出したい

    ACCESS初心者です。 上級者の方には造作も無いことかもしれませんが、 この1点に悩んだまま、どうしても答えが出ないため、質問をしています。 目的は、クエリ中のフィールド名「勤務日」にあるレコード日(日付/時刻型、データは年月日のみ)に対応した「時給」を、テーブル「T_時給」からクエリに抽出したいのです。 この場合、発令日以降、同じ人に次の時給が発令がされるまでは、従前の時給を保持したいのです。 具体的には、以下の結果となるよう、<時給>のフィールドを自動的に求めたいのです。 テーブル「T_時給」 フィールド 「従業員ID」 「発令日」 「発令給」        (数値型) (日/時型) (通貨型)        1      2009/1/1   1000        1      2009/3/1   1500        1      2009/5/1   1300        2      2009/1/1   2000 クエリ「Q_給料」 フィールド 「従業員ID」 「勤務日」 <時給>        (数値型) (日/時型) (通貨型)         1     2009/1/1   1000         1     2009/2/2   1000         1     2009/3/3   1500         1     2009/4/4   1500         1     2009/5/5   1300         2     2009/1/1   2000         2     2009/2/2   2000 これまでの結果、クエリの<時給>の抽出条件に >=[T_時給]![発令日] と入力したところ、発令日が複数ある従業員では、時給の表示も複数抽出されて、レコードがダブってしまいます。 どうか、よろしくお願いします。

  • Access2000抽出方法

    実施者 日付   記録 1   9/8  3分 1   9/10  2分 1   9/11  1分 2   10/1  3分 2   10/2  4分 上記のような場合、実施者毎に最新の日付の記録を抽出する方法。つまり、 実施者 日付  記録 1   9/11  1分 2   10/2  4分 Dmaxを使えば良い気がしますが、うまくいきません。現在、クエリ上にて実施者毎にグループ化して、実施者毎の最高記録、最低記録、平均記録はできたのですが、最新記録がうまくいきません。できれば同じクエリ上で表示できればと思っています。 よろしくお願いします。

  • Microsoft Access2000で抽出?

    Microsoft Access2000でお客様の来店日を記入帳を作っているのですが、お客様のカルテ番号と名前を別クエリ(住所録 来店日記入クエリ)から 名前を抽出?検索?どちらになしたら良いか解らないのですが、来店日記入フォーム(顧客来店日テーブル/レコードソース) の名前のテキストボックスに記入したいのですがどの様にしたら良いでしょうか? 来店日記入フォーム(顧客来店日テーブル/レコードソース)のカルテ番号(テキストボックス)に記入したカルテ番号で 住所録 来店日記入クエリ(カルテ番号・名前)から名前を抽出して 来店日記入フォームの名前(テキストボックス)に記入したいんです 申し訳ございませんがよろしくお願いします

  • ACCESS2000のクエリについて教えてください。

    ACCESS2000でデータから抽出したいのですが、抽出条件をどのようにすればいいのかわかりません。 フィールドに「日付」「ID」「日時」があり、日付別、ID別の最新日時だけを一度に抽出したいと思っています。 どのように条件を設定したらよいのでしょうか? アドバイスよろしくお願いします。

  • Access2007で同月同日を抽出

    ある(*.accdb)のクエリーで日付の所に Like"*/"&Format(date(),"mm/dd") と書いて本日と同じ同月同日を抽出していますが本日ではなく任意の yyyy/mm/ddをあるレコード欄に入力したらその日付の同月同日を抽出するにはクエリーにどの様に書けばよいのか教えてください。

  • Access2000で重複データに・・・

    Access2000の重複データの処理について質問です。 あるフィールドの重複レコードを検索し、該当するレコードの別フィールドに「●」をつけようとしています。ただ、重複する最初のレコードには「●」をつけたくないのです。 例えば  aaa ・・・ (1)  bbb  aaa ・・・ (2)  ccc  aaa ・・・ (3)  eee というフィールドだった場合、(1)には「●」をつけずに(2)以降にのみつけたいのです。 重複クエリで重複レコードを抽出して重複テーブル作成→重複テーブルと元テーブルを組み合わせて更新クエリ作成という方法でやったのですが、そうすると(1)にも「●」がついてきます。(当然ですが・・・) 何か名案があれば教えてください。 やはり、VBAを使わないと無理でしょうか・・・?

  • 【Access2000】レコードの抽出方法

     Access2000を使用してデータベースを作成していますが、抽出条件でつまずいています。  具体的には、  【1】選択クエリーAを基に作成したフォームA(単票形式でレコードを1件ずつ表示)があります。  【2】フォームAの中に単票形式でレポートを出力するマクロボタンが有。  【3】現在はマクロボタンを押すとパラメータで「データNo.?」と入力してもらう形になってレコードを1件抽出する形になっています。    ※画面上に表示されている「データNo.」フィールドの数値を入力してもらう形です。  質問についてですが、今のところはパラメータを入力してもらいレコードを抽出→レポートを出力していますが、パラメータを使わず、現在、フォーム上に表示されているレコード(表示されている1件)を抽出する方法はないかと壁にぶち当たっています。  言い換えれば、レポートを出力する際の元になるクエリの抽出条件で「現在、表示されているレコード」をどのように記述すればいいか、もし御存知の方がいらっしゃいましたら御教示お願いいたします。

  • ACCESS2000でクエリで抽出したレコードをフォームに表示するには

    A顧客テーブルで作成したフォームからコマンドボタン(電話番号検索)押下時に 電話番号入力画面が出て入力した電話番号とマッチした顧客レコードをフォームに 表示させたいのですが上手く出来ません。 現在進めている方法では何がダメなんでしょうか(以下は考え方) A顧客テーブルから作成したフォムに電話番号コマンドを作成してコマンドを 押すとクエリの実行をさせる。クエリはA顧客テーブルのフィールドを全て選択して抽出条件に[電話番号入力]としている。 (結果) ・フォームを開くと先に電話番号入力が出てくる、先にフォームが開かない。 ・電話番号検索コマンドボタンを押すと抽出条件に合ったレコードはデーターシートビューに表示される。 よろしくお願いします