プロが教えるわが家の防犯対策術!

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を書けばいいのでしょうか?

A 回答 (7件)

#2回答者です。



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

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

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

>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指定してないと、表全部から抽出するので意味が違うのは、確かにこちらの記述ミスです。
    • good
    • 0

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;
と書きたかったんでしょうか??
    • good
    • 0

select DISTINCT No,min(日付) from hoge order by No ASC;


が明示的かな?とも思います。

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

の方が簡単ですけどね。
    • good
    • 0

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



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

で充分OK。

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

こんな感じ。



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

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

    • good
    • 0

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