• ベストアンサー

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

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

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

  • ベストアンサー
  • 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