名前   番号  登録日
-------------------------
名前1 1 2002/01/01
名前2 2 2002/05/01
名前3 3 2003/02/01
名前1 4 2003/02/01
名前3 5 2004/01/01
上記のようなデータがある時、


名前   番号  登録日
-------------------------
名前1 4 2003/02/01
名前3 5 2004/01/01
の様に同一の名前があるときは登録日が最新のをselect
したいのですがうまくいかないので、どうやればできるのか教えてください(max関数やGroup Byを使ったのですがうまくいきませんでした)

A 回答 (5件)

アクセスのVBA等でプログラムを組めば、普通に制御できると思いますが、SQL文だけでは無理だと思います。


少々、知識が古いですが。
    • good
    • 0

下記で出来ます。



SELECT テーブル名.名前, Max(テーブル名.登録日) AS 登録日の最大
FROM テーブル名
GROUP BY テーブル名.名前
HAVING (((Count(テーブル名.名前))>1));

名前でグループ化し同一の名前のレコードのカウントする。
カウントが2以上のレコードの最大の登録日を抽出する。
    • good
    • 0

結果をテーブルに格納してもいいですか?



結果テーブルの「名前」フィールドを「重複なし」に設定してください。

クエリーまたは、SQLで「登録日」を降順に設定し、結果テーブルに追加クエリーしてください。
最新だけがテーブルに追加され、それ以外の名前の重複するレコードはエラーとなってはじかれます。

この時表示されるエラーメッセージを出したくない場合には「アクションクエリー」の確認オプションのチェックをはずしてください。
    • good
    • 0

SELECT テーブル1.名前, Max(テーブル1.日付) AS 日付の最大


FROM テーブル1
GROUP BY テーブル1.名前;

では駄目ですか?
IDまで必要ならばこのクエリーともとのテーブルを繋ぐクエリーを作る。
    • good
    • 0

SELECT テーブル名.*


FROM テーブル名
WHERE (((テーブル名.名前)="名前1"));

上記のSQLで平気だと思います。
結果の名前が1ではなく3になってますよ。
    • good
    • 0

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


人気Q&Aランキング