-PR-
解決済み

access2000での抽出条件

  • すぐに回答を!
  • 質問No.16828
  • 閲覧数87
  • ありがとう数6
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 63% (81/128)

DBから選択クエリーを作ってある条件を満たすデータを抽出したいのですが、レコードの量が多くて(10万単位)スぺックの悪いPCなので並べ替えをするにも固まってしまって困っています。

同じ名前を持つレコード群の中で最新の日付のレコードだけを抽出する関数ってありますか?

例えば
発生日,名前,種類,住所,電話番号
の5つのフィールドがあり、その中で同じ"名前"を持つ"発生日"の中で最新の日付だけを抽出する、として教えていただけないでしょうか。
よろしくお願いいたします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル8

ベストアンサー率 35% (7/20)

再度回答します。(最初の回答より掘り下げました)
まずクエリーを作ります。(例:クエリー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関数を使う方法もあるので書き出すときりがない)
あとインデックスは貼ることができるなら貼った方がいいです。(方法は前回に回答済)
お礼コメント
ponpon

お礼率 63% (81/128)

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

その他の回答 (全3件)

  • 回答No.1
レベル10

ベストアンサー率 43% (68/156)

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

 レコード数が 10 万単位もあるということですが、
1 つのテーブルにそれだけあるということですよね。
ここはひとつ、データベースの構造を考え直すべきでは
ないでしょうか。どのようなデータベースを作って
いらっしゃるのか、もっと詳しく書いていただければと
思います。
補足コメント
ponpon

お礼率 63% (81/128)

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


  • 回答No.2
レベル7

ベストアンサー率 38% (10/26)

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

これだけでいいと思います。もし、グループ化がまずい場合は、「発生日」フィールドと「名前」フィールドだけのクエリと、「名前」「種類」「住所」「電話番号」フィールドのクエリを作って、ここから「名前」フィールドで繋ぎ合わせたクエリを作るといいと思います。

この場合は、「テーブル作成クエリ」などを利用して、「シリアル番号」フィールドを付け加えた「作業用のテーブル」を作ってしまう方がやりやすいと思います。
お礼コメント
ponpon

お礼率 63% (81/128)

どうもありがとうございました。
チャレンジしてみたのですが結局最後までクエリーは開くことなく、ものすごくアナログにつぎはぎつぎはぎして
テーブルを移した後クエリー抽出することで作業をムリヤリ終わらせました。
投稿日時 - 0000-00-00 00:00:00
  • 回答No.3
レベル8

ベストアンサー率 35% (7/20)

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

後、データベース定義で名前と最終日にインデックスを貼ればいい(重複あり)
私のパソコンで30万件のデータ検索で約4分でした。
お礼コメント
ponpon

お礼率 63% (81/128)

ありがとうございます。
うちのsql、規模小さいくせに支社からもみんなでアクセスしているのでやはり直接いじる事を躊躇してしまいました。もし壊したら私のスキルでは自信がないから・・

あと、質問なんですが今回の場合、各名前に対して最終日付(latest day)がバラバラなのですが、その場合は
select日付の部分をどう書けばよいのか教えていただけないでしょうか?["00/*/*"or"99/*/*"]で使えますか?
すみません,お願いします。
投稿日時 - 0000-00-00 00:00:00
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ