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

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

A 回答 (5件)

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/07 14:22

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しか触ったことがないので外していたらごめんなさい)。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/08 11:00

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

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

お礼日時:2008/02/08 11:03

最新更新日時だけを取り出すのではなく


>更新日時の新しいレコードのみを抽出する方法
ですから

クエリの更新日時の抽出条件欄に

In (select max(更新日時) from テーブル名)

でないとだめですね

この回答への補足

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

補足日時:2008/02/08 08:28
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/08 11:05

更新日________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;

逆順に更新日で並びかえてトップのレコードを読む込むという手もあります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/07 14:54

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