プロが教える店舗&オフィスのセキュリティ対策術

OS:WinXP
Access:2000

下記の状態にしたいのですが
よいSQL文が思いつきません。
MINのみのデータを抽出する方法は分かるのですが

select ID,Name,Min(Date) from tblA
group by ID,Name,Date

MAX(Date)も出力しようとすると、Dateが最小のNameの出力方法が分かりません。

テーブル(tblA)
ID|Name|Date
---------------
01|C |8/10
01|A |8/11
01|B |8/12



クエリ実行後
ID|MIN(Name)|MIN(Date)|MAX(Date)
-----------------------------------
01|C |8/10 |8/12

よろしくお願いいたします。

A 回答 (3件)

#1です。

なるほどそうなると VIEW(クエリー)を二つ作って

CREATE VIEW v1 as SELECT テーブル1.ID, Min(テーブル1.date) AS dateの最小
FROM テーブル1
GROUP BY テーブル1.ID;

CREATE VIEW v1 as SELECT テーブル1.ID, Max(テーブル1.date) AS dateの最大
FROM テーブル1
GROUP BY テーブル1.ID;

SELECT テーブル1.ID, テーブル1.name, テーブル1.date, v1.dateの最大
FROM テーブル1 INNER JOIN (v1 INNER JOIN v2 ON v1.ID = v2.ID) ON テーブル1.date = v1.dateの最小;

位しか考えつかないです(^^;
    • good
    • 0
この回答へのお礼

なんどもご回答ありがとうございました。
上記を参考に最小日付をもつのviewと最大日付をもつviewを作成し、結合した新たなviewを作成することで解決致しました。
Inner Join!!思いつきも致しませんでした。
最後までお付き合いくださりありがとうございました。

お礼日時:2005/08/11 09:49

#1です。

質問を良く読まずに失礼しました(^^;あらため

SELECT テーブル1.ID, テーブル1.name, (SELECT DISTINCT Max(テーブル1.date)
FROM テーブル1)
FROM テーブル1
WHERE (((テーブル1.date)=(SELECT DISTINCT Min(テーブル1.date)
FROM テーブル1)));

でいかがでしょう?
試験用に作ったテーブル1には
・ID:PKey
・name
・date
があります
    • good
    • 0
この回答へのお礼

お早いご回答ありがとうございます。
上記回答ですと、検索結果として、

ID|最小dateの名前|最大Date

となると思いますが、私がやりたいことは

ID|最小dateの名前|最小date|最大Date
          ====

です。
また、IDは1つではなく、1,2,3・・・と複数です。
これは、GroupBy句で指定してあげるといいのでしょうが、そうするとnameもgroupby句にいれなくてはいけないので、やろうとしていることができません。
(IDとnameでグルーピングした最小、最大を抽出したいのではなく、IDでグルーピングして最小日付のname、最小日付、最大日付を抽出したいのです。)
説明不足で申し訳ありません。

お礼日時:2005/08/10 13:36

SELECT DISTINCT Max(ID) AS IDの最大, Min(ID) AS IDの最小


FROM Tbl;

みたいなのでは?
    • good
    • 0
この回答へのお礼

Dateが最小のNameとDate、同じIDの最大のDateを抽出したいので、
頂いた回答だとDateが最小のNameが抽出されません。
ご回答ありがとうございました。

お礼日時:2005/08/10 11:52

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