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