アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

例えば
発生日,名前,種類,住所,電話番号
の5つのフィールドがあり、その中で同じ"名前"を持つ"発生日"の中で最新の日付だけを抽出する、として教えていただけないでしょうか。
よろしくお願いいたします。

A 回答 (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/
    • good
    • 0
この回答へのお礼

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

お礼日時:-0001/11/30 00:00

クエリーデザインを開き右クリックしSQLビューを開き、直接記述します。


select 最終日付
from DB名
where 名前=対照となる名前
order by 最終日付 desc

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

参考URL:http://www.e-taiko.co.jp/
    • good
    • 0
この回答へのお礼

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

あと、質問なんですが今回の場合、各名前に対して最終日付(latest day)がバラバラなのですが、その場合は
select日付の部分をどう書けばよいのか教えていただけないでしょうか?["00/*/*"or"99/*/*"]で使えますか?
すみません,お願いします。

お礼日時:-0001/11/30 00:00

選択クエリなら簡単です。


1.グループ化をする。
2.「発生日」フィールドで「集計方法」を「最大」にする。

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

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

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

お礼日時:-0001/11/30 00:00

 具体的な解決策ではないことをあらかじめ


お断りしておきます。

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

この回答への補足

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

補足日時:2000/12/06 18:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!