- 締切済み
重複データからの取得方法を教えてください
id s_no s_name ---------------- 1 001 aaaa 2 005 bbb1 3 005 bbb2 4 002 cccc 5 005 bbb3 6 005 bbb4 上のものがテーブルの内容です。取得したい結果が ---------------- 1 001 aaaa 4 002 cccc 5 005 bbb3 です。 試したSQLは select distinkd on (s_no) id,s_name from shain where id>=5 order by id desc select id,s_no,s_name from shain where id>=5 group by s_no order by id desc などです。 データベースがmdbなのでdistinkd onは使えませんでした。 もしかすると書式が違うのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- CHRONOS_0
- ベストアンサー率54% (457/838)
>なぜテーブル名のshainをasを使ってAに置き換えたものを書いて下さったのですか? 自分自身を参照する場合のテクニックです 自分自身を別の名前で開き比較に使っています つまり注目しているレコードとs_noが同じレコードの中から s_nameが最小のものをとりだし抽出条件としています
- CHRONOS_0
- ベストアンサー率54% (457/838)
idが必要なければ集計クエリでs_noをグループに指定して s_nameの最小を取り出すだけですね 集計に関係ないフィールド(id)も取り出したいときにはサブクエリを使います s_nameフィールドの抽出条件欄に In (select min(s_name) from テーブル名 as A where A.s_no=テーブル名.s_no)
- tofu14
- ベストアンサー率33% (1/3)
取得したい結果をどの条件でもよいから取得するのでしょうか? id>=5の条件から取得するのでしょうか? 005に対しての名称が一意でないようなので、distinctしても 005 bbb3 というのは取得できないと思います。 それと、id>=5では、取得したい 1 001 aaaa 4 002 cccc 5 005 bbb3 のうち、id=1と4が抽出されないと思いますが。
補足
なぜテーブル名のshainをasを使ってAに置き換えたものを書いて下さったのですか?