こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

SQLで・・

No 日付
6  98-08-08
6  05-05-05
6  05-10-10
7  97-05-05
7  98-08-08
8 99-12-31
8  00-08-08
という表があって、これを
No 日付
6  98-08-08
7 97-05-05 
8 99-12-31

というNoひとつに対して一番古い日付を抽出したいのですがどんな感じのSQLを書けばいいのでしょうか?

投稿日時 - 2005-11-21 18:46:13

QNo.1793032

暇なときに回答ください

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

#2回答者です。

取り出すのはNoと日付だけですか?
もしそうなら、

SELECT No,MIN(日付) FROM 表
GROUP BY No

で大丈夫です。
No、日付以外の列も取り出すなら、#2で回答した
SQLを使用してみてください。

投稿日時 - 2005-11-22 05:01:07

ANo.6

>select No,min(日付) from hoge group by No;
を、思い切りデコレーションして、
>select DISTINCT No,min(日付) from hoge GROUP BY No order by No ASC;
>と書きたかったんでしょうか??

その通りです。
min(日付)が、group by No指定してないと、表全部から抽出するので意味が違うのは、確かにこちらの記述ミスです。

投稿日時 - 2005-11-22 00:39:25

ANo.5

select No,min(日付) from hoge group by No;

select DISTINCT No,min(日付) from hoge order by No ASC;
は、意図が変わるような気がします・・

というか、#4のSQLは、少なくとも9i以前では、ora-937のエラーです。
(group-byしていないのに、グループ関数を使うので。)

もしかして...

select No,min(日付) from hoge group by No;
を、思い切りデコレーションして、
select DISTINCT No,min(日付) from hoge GROUP BY No order by No ASC;
と書きたかったんでしょうか??

投稿日時 - 2005-11-21 23:52:53

ANo.4

select DISTINCT No,min(日付) from hoge order by No ASC;
が明示的かな?とも思います。

select No,min(日付) from hoge group by No;

の方が簡単ですけどね。

投稿日時 - 2005-11-21 23:29:05

ANo.3

問い合わせする要素が、Noと日付の2つであるなら

select No,min(日付) from hoge group by No;

で充分OK。

#2で書いているSQLで、2回表を探索する意義が良くわからない。
(ただの考えすぎ?)

投稿日時 - 2005-11-21 21:34:51

ANo.2

こんな感じ。

SELECT No,日付
FROM 表
WHERE (No,日付) IN(SELECT No,MIN(日付)
FROM 表
GROUP BY No)

投稿日時 - 2005-11-21 21:09:14

ANo.1

「Group By」で調べてください

投稿日時 - 2005-11-21 19:23:59

あなたにオススメの質問