• ベストアンサー

アクセスの特定のレコード抽出方法

アクセスで、同じ内容のレコードで更新日時フィールドのみ変化している複数のレコードから、更新日時の新しいレコードのみを抽出する方法を教えてください。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

更新日時以外の項目でグループ化して、更新日時はmax([更新日時])で取り出せばいいのではないでしょうか?

h_otukisan
質問者

お礼

早速の回答ありがとうございます。すぐに挑戦してみます。

その他の回答 (4)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

No.1です。 たとえばID,NAME,ADDR,SDATE,UDATEといったデータでUDATEだけが変わっている場合、 (1) SELECT ID, NAME, ADDR, SDATE, MAX(UDATE) AS LASTUDATE FROM TABLE GGROUP BY ID, NAME, ADDR, SDATE とするかGROUP BYに長く書くのがいやなら (2) SELECT ID, LAST(NAME) AS WNAME, LAST(ADDR) AS WADDR, LAST(SDATE) AS WSDATE, MAX(UDATE) AS LASTUDATE FROM TABLE GGROUP BY ID と逆に抽出項目にLASTかMAXかを書くことになります。どちらかといえば前者の方が素直でわかりやすいかもしれません。 GUIで作るならクエリのデザインビューで  (1) テーブルの全項目を下(SELECT)へ  (2) クエリ種別をいったんクロス集計にしてから選択クエリに戻す(集計欄に「グループ化」が入る  (3) 変更日だけ「グループ化」→「最大」に変更する で出来ると思います(Accessは97と2002しか触ったことがないので外していたらごめんなさい)。

h_otukisan
質問者

お礼

ありがとうございました。 クエリーで何とか形ができました。一度クロスにして戻してグループ化が残るとは思っても見ませんでした。それを駆使してできました。後は加工の問題です。助かりました。

noname#140971
noname#140971
回答No.4

1、デザインビューでクエリを作成するをクリック。 2、列[更新日]を下に。 3、列[更新日]の並び替えを降順に。 4、メニュー[表示][SQL ビュー] をクリック。 SELECT tab1.更新日, * FROM tab1 ORDER BY tab1.更新日 DESC; このようなSQL文が作成されています。 SELECT Top 1 tab1.更新日, * FROM tab1 ORDER BY tab1.更新日 DESC; このように Top 1 を書き加えたら完成です。 >更新日時フィールドのみ変化している複数のレコードから・・・ さて、表現が実に微妙??? 更新日_________fld_1 2008/01/01__A 2008/01/02__B 2008/01/03__C 2008/01/03__D 1、デザインビューでクエリを作成するをクリック。 2、列[更新日]を下に。 3、列[更新日]の抽出条件に<DMax("更新日","tab1")>と入力。 クエリ2: 更新日_________fld_1 2008/01/03__C 2008/01/03__D

h_otukisan
質問者

お礼

いろいろと考えていただきありがとうございました。 私のレベルではクエリー程度が精一杯と言うことがわかりました。本当にありがとうございました

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

最新更新日時だけを取り出すのではなく >更新日時の新しいレコードのみを抽出する方法 ですから クエリの更新日時の抽出条件欄に In (select max(更新日時) from テーブル名) でないとだめですね

h_otukisan
質問者

お礼

適切な質問記入になっていなくてご迷惑をおかけしました。 皆様のおかげで解決いたしました。ありがとうございました

h_otukisan
質問者

補足

すみません、やはり質問が適切ではなかったようです。 例を挙げて見ます。 ある20名のクラスで、それぞれA、B、C、・・・と言う名前のレコードがあり、何か変更修正を行ったら修正日時と言うフィールドに修正日時を入力し新たなレコードを作製します。要するに古いレコードも履歴として同じテーブルに残しています。(したがって一人1レコードでなく複数レコードある状態) そのテーブルから、20名分それぞれその人の最新の1レコードだけを抽出して別のテーブルを作成(又はクエリーで表示するだけでもOK)したい このたとえで皆さんに伝わるでしょうか?

noname#140971
noname#140971
回答No.2

更新日________fld_1 2008/01/01_A 2008/01/02_A 2008/01/03_A [イミディエイト] ? XXXXXX("SELECT Top 1 * FROM TAB1 ORDER BY 更新日 DESC") 2008/01/03;A; 逆順に更新日で並びかえてトップのレコードを読む込むという手もあります。

h_otukisan
質問者

お礼

ありがとうございます。 でも、私のようなレベルではちんぷんかんぷんのコマンドです。 すみません_○_ 何かもっと簡単には無理なんですかね?クエリーの抽出条件にIIF文を使ってとか? かって言ってすみません

関連するQ&A

  • Access2000: 複数のフィールド内の特定文字を含むレコードの検索・抽出をどのように設定方法

    一つのレコード内にField01, Field02, Field03があります。 Access2000を使用しています。 Main Form(MF)に設置したText Box01 とTex Box02に任意のあいまいな文字をエントリーした場合、 (1) その両方(2)そのいずれか、 の文字を含む複数のレコード検索・抽出を行いたいと思います。 事情に応じて(1)或いは(2)の結果をQuery(FormやReportのベース)に表示させる良い方法を 教えて下さい。(QueryやVBA等のコードの書き方等)

  • ACCESS2000でのレコード抽出

    OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。

  • 【Access2000】レコードの抽出方法

     Access2000を使用してデータベースを作成していますが、抽出条件でつまずいています。  具体的には、  【1】選択クエリーAを基に作成したフォームA(単票形式でレコードを1件ずつ表示)があります。  【2】フォームAの中に単票形式でレポートを出力するマクロボタンが有。  【3】現在はマクロボタンを押すとパラメータで「データNo.?」と入力してもらう形になってレコードを1件抽出する形になっています。    ※画面上に表示されている「データNo.」フィールドの数値を入力してもらう形です。  質問についてですが、今のところはパラメータを入力してもらいレコードを抽出→レポートを出力していますが、パラメータを使わず、現在、フォーム上に表示されているレコード(表示されている1件)を抽出する方法はないかと壁にぶち当たっています。  言い換えれば、レポートを出力する際の元になるクエリの抽出条件で「現在、表示されているレコード」をどのように記述すればいいか、もし御存知の方がいらっしゃいましたら御教示お願いいたします。

  • ACCESSで重複するレコードは無視する

    ACCESSで複数のフィールドで重複するレコードを1個だけにする方法教えていただけませんか。エクセルのフィルターオプションのように複数のセルを選び、重複するレコードを無視する方法です。 フィールド名1、フィールド名2、フィールド名3があり、1にはたとえば県名、2には市町村名、3には学校名があり、これを重複を除き1レコードにしたい。削除はできるのですが、レコードを1個にするのが出来なくて弱っています。ACCESS2003です。

  • Accessでの抽出について

    Accessで下記のようなテーブルがあるとします。 フィールド1  フィールド2  フィールド3 ----------------------- Aさん      20       200 Aさん      10       180 Bさん      10       300 Cさん      10       250 Cさん      30       310 条件1・・・フィールド2が「20」 条件2・・・フィールド3が「200」 この条件が当てはまる、フィールド1のデータはすべて抽出というふうにしたいのですが・・・。 (上記のテーブルでは、1件目と2件目のレコードがあてはまります。) どのようにして抽出したらよいでしょうか?よろしくお願いします。 Access2000を使用します。

  • Access 各レコードの中での最大フィールドを抽出したい

    Accessにつぎのようなテーブルがあります(例)。 各人の成績表 フィールド1:名前 フィールド2:1回目の得点 フィールド3:2回目の得点 フィールド4:3回目の得点 名前の重複はありません。 レコードごとに、フィールド2~4の最大値を抽出する方法を教えていただけると、たいへん幸せです。 どうぞ、よろしくお願いします。

  • Accessで最新のレコードを抽出するには

    お世話になります。 このようなテーブルがあるとします。 No|日時     | 部門  | 更新内容  --+------------+--------+---------- 1 |04/12 12:21:35| A部門 | 更新C 2 |04/07 09:15:05| B部門 | 更新う 3 |04/19 08:23:45| A部門 | 更新A 4 |04/05 10:15:20| B部門 | 更新あ 5 |04/20 09:20:13| B部門 | 更新い 6  |04/02 09:20:15| A部門 | 更新B この中から部門毎にグループ化して 部門毎に日時の最新のデータ No|日時     | 部門  | 更新内容  --+------------+--------+---------- 3 |04/19 08:23:45| A部門 | 更新A 5 |04/20 09:20:13| B部門 | 更新い を抜き出すクエリの作り方を教えてください。 ちなみに今困っているDBの更新内容に相当するフィールドは50フィールドほどあります。 よろしくお願いします。 多分クエリの集計を使用すると思っています。 多少ですがSQLわかります。 多少ですがVBAわかります。

  • アクセスでのデータの引き抜き(抽出)方法について

    アクセスのデータ抽出についてご質問が ございます。 100件あるデータの中から 抽出条件が異なるデータを レコードごとに3件抽出したいのですが 困ってます。 例えば、100件のデータの 1フィールド目の数値が 1234567890 7891234567 5678901234 となる値を 抽出条件に割り当て 100件中3件ほど、レコードごとに 抽出出来る 方法はないでしょうか? お手数ですがアドバイスお待ちして おります。

  • Access 複数の抽出条件

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

  • ACCESSのレコード数表示

    ACCESS97において フィールド数 複数(仮にA~E) レコード数  複数 値    3or2or1の時の フィールドAにおける3のレコード数         2のレコード数         1のレコード数 これをフィールドA~Eすべてについて 知りたいのですが、良い方法を知りませんか?