• ベストアンサー

access2000での抽出条件

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

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

  • ベストアンサー
  • moisabc
  • ベストアンサー率35% (7/20)
回答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/
ponpon
質問者

お礼

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

その他の回答 (3)

  • moisabc
  • ベストアンサー率35% (7/20)
回答No.3

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

参考URL:
http://www.e-taiko.co.jp/
ponpon
質問者

お礼

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

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

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

ponpon
質問者

お礼

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

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

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

ponpon
質問者

補足

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

関連するQ&A

  • Accessでの抽出について

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

  • Access 複数の抽出条件

    Access2002 windows2000 (例)次のようなテーブルとします。 フィールド名:名前 年齢 性別 レコード1 :山本 30 男 レコード2 :鈴木 40 女 レコード3 :田中 45 男 レコード4 :森本 26 女 クエリを利用して抽出する時、年齢が40以上で男を条件とすれば (1)年齢フィールドの抽出条件:>=40 (2)性別フィールドの抽出条件:男 として、田中が抽出されます。 では年齢が40以上で男、そして女は全て抽出したい時は(1)(2)の条件はどの様にすればいいでしょう? 抽出結果が 田中、鈴木、森本となりたいのです。 複数のクエリを作れば出来ますが、1つのクエリでは無理なのでしょうか。

  • ACCESS2000 クエリの抽出条件

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

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • Access 抽出条件

    クエリの抽出条件で特定のレコードを抽出したいのですが 最新の三年分のレコードデータを抽出する場合どのような式にすればよいのでしょうか? テーブルには年月フォームがあり年月が入力されています。

  • Access クエリ 抽出条件

    Access の クエリ における 抽出条件 の 書き方についてご質問させていただきます。 クエリには、左から『商品名』、『出荷数量』、『注文数量』の3列がございます。 各レコードの『出荷数量』フィールドの値と『注文数量』フィールドの値を比較し、 『注文数量』フィールドの値の方が大きいレコードだけを抽出したいのですが、どのように抽出条件を記載すればよろしいでしょうか? 元データは1つのテーブルに格納されています。 例:注文数量:500、出荷数量:200など出荷数量が少ないレコードを抽出対象 注文数量:100、出荷数量:100など注文数量=出荷数量レコードは抽出対象外

  • Accessの抽出についての質問

    Accessの抽出についての質問をします。 テーブルからデータシートビューで開いたものを「レコード」「フィルタ」「フィルタ/並べ替えの編集」で条件を入れて抽出できると思います。 そこまでは理解できたのですがクエリの場合はもう1つあると知りました。 クエリの中のデータをやはりデータシートビューで開いて、「レコード」「フィルタ」「フィルタ/並べ替えの編集」で条件を入れて抽出する以外に デザインビューで開いてデザイングリッドという下の画面でも同じように条件を入れて抽出できると聞きました。 画面はデータシートビューでの「フィルタ/並べ替えの編集」画面と少し似ているようですがちょっと違います。 この2つはどう違うのですか どう使い分けるといいのでしょうか? 教えてください。

  • Accessの抽出条件がうまく作れず困っています

    Access2003で、町内会のデータベースを作っています。 各世帯を1レコードとし、家族名と生年月日をそれぞれフィールドにしています。 (例:家族1,家族1の生年月日、家族2、家族2の生年月日・・・) 子ども会の対象者を生年月日をもとにクエリで抽出しようとしています。 家族構成によって、家族1、家族2などの各フィールドに対象者が混ざっているため、クエリの「または」欄を使い、各生年月日フィールドの抽出条件に「>#2002/04/01#」と入力したところ、家族1は非対象者でも、家族2が対象者の場合、家族1の名前が抽出データに入ってしまい困っています。 (世帯によっては家族1に対象者がいるため表示になっているからで当然すよね…) 家族1、家族2の各フィールドの純粋に対象者のみ抽出するには、どのような条件式を入力すればいいでしょうか? 夏休みのイベント案内のため、早急にやらねばならず本当に困っています。 お知恵を拝借いたしたく、どうかお願いいたします。

  • クエリの抽出条件

    アクセス2003/2007のクエリの抽出条件について テーブル名:履歴 フィールド1:名前 フィールド2:履歴No フィールド3:履歴の内容 フィールド4:日付 とあります。 履歴Noは0の人、1~3まである人、1~10まである人と様々。 指定した名前毎に「履歴Noの最大値から3レコードを抽出してレポートにしたいです。 下記のようにしてみました。 Between Val(DMax("履歴No","履歴"))-2 And Val(DMax("履歴No","履歴")) これでは抽出出来ませんでした。 試しに Between 3-2 And DMax("履歴No","履歴") と直接引き算の式を入れると抽出されました。 ※Valはあってもなくても同じでした。 「履歴Noの最大値から3レコードを抽出」をうまく出来る方法は無いでしょうか。 よろしくお願いします。

  • クエリの抽出条件について

    クエリを作ろうと考えています。 複数あるフィールドの中に、2つの日付フィールドA,Bとあり、 AよりBの日付が前だった場合を抽出したいと考えているのですが、 どなたかご教授いただければと思います。

専門家に質問してみよう