Microsoft Access 掲示板

被らないユニークなレコードを任意抽出

5 コメント
views
4 フォロー

標題の件で相談させて下さい。

マスターをもとに、数十のクエリで抽出したレコードセット約数千レコードに対し、被らない約2割程度の不特定の任意のレコードにフラグを立てたいと思っています。

この↓あたりを参考にしたのですが、数が多くなると、例えば500レコードにフラグを立てたい場合、単に500ループこれを回すとデータが被り、フラグが500未満となったり、パフォーマンスもかなり悪いです。オートナンバーを振り、オートナンバーを特定する方法もあるかと思いますが、
抽出したクエリに自動で採番ができず行き詰まっています。

https://docs.microsoft.com/ja-jp/office/vba/access/concepts/data-access-objects/return-a-random-record-from-a-dao-recordset

アドバイスよろしくお願いします。

たくろー
作成: 2021/06/11 (金) 07:53:26
通報 ...
1
hiroton 2021/06/11 (金) 09:06:42 d36e7@f966d

「無作為抽出」とか「ランダムに抽出」とか似たような意味でも言葉を変えると新しい情報が見つかったりしますよ

2
たくろー 2021/06/11 (金) 09:08:12 bc949@34ac6

こんな方法はできるかな?とふと思いつきました。

ワークテーブルに、オリジナルのオートナンバーとワークテーブル用の1からの連番、そして、フラグのフィールドを設定して、クエリの抽出データをワークテーブルに書き出し、ワークテーブル用の連番の範囲に対して、乱数を使ってチェックを入れる、無限ループで、Dcountで、所定の数にチェックが付くまで繰り返し、最後に、データファイルにオリジナルのオートナンバーをキーにして抽出し、フラグを書き戻す。

3
hiroton 2021/06/11 (金) 10:32:14 d36e7@f966d

キーワードに「ACCESS」も添えて「ACCESS 無作為抽出」とかで検索すればほぼそのままズバリな内容がたくさん出てくるんですよ

クエリで乱数を取得するフィールドを追加して、その乱数で並び替えて上からnレコード取得(TOP値プロパティ)とすれば欲しいレコードが得られます。これを「フラグ」とするための実装はその後の運用と合わせて考える部分なので、躓くようであればもう少し具体的な内容を含めて質問してください

4
hatena 2021/06/11 (金) 10:34:32 修正

下記が参考になるとおもいます。

クエリでランダムに並べ替える、また、指定件数を無作為に抽出する - hatena chips

上記で指定件数を抽出できますので、もし、フィールドにフラグを立てたいなら、このクエリを更新クエリすればいいでしょう。

5
たくろー 2021/06/11 (金) 12:37:05 bc949@a9354

ありがとうございます。
検索が甘かったです、ひとまず参考リンク含めて調べてみます。

それでも躓くことがあれば具体的にまたご相談させていただきます。