• 締切済み

重複データからの取得方法を教えてください

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は使えませんでした。 もしかすると書式が違うのでしょうか?

みんなの回答

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>なぜテーブル名のshainをasを使ってAに置き換えたものを書いて下さったのですか? 自分自身を参照する場合のテクニックです 自分自身を別の名前で開き比較に使っています つまり注目しているレコードとs_noが同じレコードの中から s_nameが最小のものをとりだし抽出条件としています

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

idが必要なければ集計クエリでs_noをグループに指定して s_nameの最小を取り出すだけですね 集計に関係ないフィールド(id)も取り出したいときにはサブクエリを使います s_nameフィールドの抽出条件欄に In (select min(s_name) from テーブル名 as A where A.s_no=テーブル名.s_no)

tvus4rct
質問者

補足

なぜテーブル名のshainをasを使ってAに置き換えたものを書いて下さったのですか?

  • tofu14
  • ベストアンサー率33% (1/3)
回答No.1

取得したい結果をどの条件でもよいから取得するのでしょうか? id>=5の条件から取得するのでしょうか? 005に対しての名称が一意でないようなので、distinctしても 005 bbb3 というのは取得できないと思います。 それと、id>=5では、取得したい 1 001 aaaa 4 002 cccc 5 005 bbb3 のうち、id=1と4が抽出されないと思いますが。