• 締切済み

こんなことできるSQL文はありますでしょうか?

お世話になります。 oracle9iとPostgreSQL7.3のいずれかで 実現したいのですが。 こんな並びのデータを no | resno | title ----+-------+------ 1 | 1 | あ 2 | 1 | い 3 | 1 | う 4 | 4 | え 5 | 1 | お 6 | 4 | か 7 | 7 | き 8 | 1 | く 9 | 9 | け こんな風に no | resno | title ----+-------+------ 9 | 9 | け 7 | 7 | き 8 | 1 | く 5 | 1 | お 3 | 1 | う 2 | 1 | い 1 | 1 | あ 6 | 4 | か 4 | 4 | え SQL文一発で並び替えることは できますでしょうか? resnoのグループごとをnoの降順で 表示したいのですが、、、 可能なのか不可能なのかもわかりません。 可能であればSQL文をご教授いただければ 幸甚です。 よろしくお願いします。

みんなの回答

回答No.2

ちょっと考えてみました。テーブル名をtable1として... select no, resno, title from (select no, resno, title, (select max(t1.no) from table1 as t1 where t1.resno = table1.resno) as maxno from table1 order by maxno desc, no desc) as t2; 見難くて恐縮ですが1行で記述して下さい。 table1から直接導くのは無理っぽいので、作業用のmaxnoを付加したテーブルt2を設定します。maxnoには、同一resnoのグループの中の最大のnoをセットします。つまりresnoとグルーピングが同じで、グループ間の値の大小関係はnoに準じるという値です。これとnoで降順に表示すれば求める結果が得られると思います。 (PostgreSQL7.3.4で確認しました)

sonar
質問者

お礼

ご返答ありがとうございます。 教えていただいた説明の中から maxnoを別テーブルにもち maxnoとnoで降順に表示すればOKと 言うことでしたので、 select no,resno,title from table1 natural inner join table2 order by maxno desc, no desc; としたところ旨く表示されました。 table2には以下のようにデータを入れました。 resno | maxno ----+------- 4 | 6 1 | 8 7 | 7 9 | 9 maxnoを持つという発想がそもそも出てこなかったので ほんとに勉強になりました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • holy_wind
  • ベストアンサー率30% (3/10)
回答No.1

no | resno | title ---+------+------ 9 | 9 | け 7 | 7 | き 6 | 4 | か 4 | 4 | え 8 | 1 | く 5 | 1 | お 3 | 1 | う 2 | 1 | い 1 | 1 | あ という形でよろしいのであれば、 SELECT no, resno, title FROM テーブル名 ORDER BY resno desc, no desc; でいけると思います。 他にも色々やり方はありそうですが・・・

sonar
質問者

補足

ご返答ありがとうございます。 希望結果に間違いがありました。 申し訳ありません。 以下のようにしたいと考えております。 no | resno | title ----+-------+------ 9 | 9 | け 8 | 1 | く 5 | 1 | お 3 | 1 | う 2 | 1 | い 1 | 1 | あ 7 | 7 | き 6 | 4 | か 4 | 4 | え 見やすいようにresnoのグループごとに 改行をいれました。 resnoのグループごとをnoの降順で 表示したいと考えております。 どうぞよろしくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A