• 締切済み

こんなことできる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文をご教授いただければ 幸甚です。 よろしくお願いします。

  • sonar
  • お礼率57% (27/47)

みんなの回答

回答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

  • SQL文の長さ

    お世話になります。 SQL文の長さには限界があるのでしょうか? 現在、オラクル付属のSQL PlusにてSQL文を流したところ、途中で止まってしまいます。 部分的に流しますと問題なく通ります。 環境はoracle9iです。 なにかわかりましたらよろしくお願い致します。

  • postgreSQL SQL

    postgreSQL7.3で以下のようなデータの並び替えを実現したいと思っています。 下記のようなデータを・・・ no | recno | name ----+-------+------ 1 | 1 | a 1 | 1 | b 1 | 2 | c 1 | 4 | a 2 | 3 | a 2 | 3 | c 2 | 3 | b 3 | 5 | b 4 | 6 | a 下記のような並びにSQLで取得することは可能でしょうか。 no | recno | name1 | name2 | name3 ----+-------+------+------+------ 1 | 1 | a | b | 1 | 2 | c | | 1 | 4 | a | | 2 | 3 | a | b | c 3 | 5 | b | | 4 | 6 | a | | noとrecnoのグループごとにnameを横に並べていきたいのですが、 可能なのでしょうか。 できれば、nameは個々のカラムに出力したいのですが、 配列のように1つのカラム内にカンマ区切りでの出力でも構いません。 上記のような表示が可能であれば、SQL文もご教授いただけますと幸いです。 宜しくお願いいたします。

  • SQL文について教えてください。

    お世話になります。 テーブルを3つ作りました ユーザーテーブル:USER_MS USE_NO USER_NAME 001   太郎 002   次郎 003   三郎 品名テーブル:HINMEI_MS HINMEI_NO HINMEI_NAME 001    りんご 002    みかん 003    イチゴ 嫌いなものテーブル:KIRAI_TR KIRAI_NO USER_NO HINMEI_NO 001001  001   001 002003  002   003 002001  002   001 ※KIRAI_NO=USER_NO.HINMEI_NO と連結してプライマリーキーにした ここで、次郎の嫌いなものを抽出するときには $USER_NO = '002'; $SQL ="SELECT * FROM KITAI_TR A,HINMEI_MS B WHERE A.USER_NO = '$USER_NO'; で抽出できるのですが、 次郎の嫌いでない002みかんだけを抽出するSQL文がわからず苦慮しています。 以前、オラクルでSQLを使ったことがあったのですが、その時はFROM句の後に(SELECT * FORM・・・・) Bなどと書くと通ったのですがMYSQLでは通りませんでした。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • OracleとSQL ServerのSQL文上での差異について

    お世話になっております。 もしOracleやSQL Serverに関してご存知の方が いらっしゃいましたらご教授ください。 今、業務で 「Oracleに載せるシステムをSQL Serverで載せられないか?」 という話が出ており私が調査を行う事になりました。 しかし私のSQL Server経験が浅い為困っている点があります。 (以下の質問は当然ですがシステムで動く・動かない の話はヌキにしてのSQLレベルでの話です) ・Oracle特有のSQL構文をSQL Serverに見合った構文に 直すことによって(DATE→datetime/NUMBER→int等)一般的な SELECT文、INSERT、UPDATE、DELETE文はそのまま使う事が可能か? ・上の件に関する経験をお持ちの方・知識のある方にお聞きしますが 何かこの件に関する注意点などありますでしょうか? の2点になります。 どうかご存知の方がいらっしゃいましたらお願い致します。

  • SQL文の質問です

    社員表(EMP表)と給与等級表(SALGRADE表)を結合したいのですが下記を実現するSQL文がわかりません。 SALGRADE表は等級(grade)、最低給(Losal)、最上給(Hisal)の3つを持っています。 EMP表の月給(Sal)と、SALGRADE表の最低給(Losal)と最上給(HIsal)とを照らし合わせて該当する等級(grade)をEMP表に結合したいのですが、適切なSQL文がありましたら教えてください。 基本的にはoracleを使用していますが、できればmysqlで実現可能なSQL文も合わせて教えてください。

  • SQL文を教えてください。

    SQL文を教えてください。 グループ毎にレコード数をカウントして、レコード数が大きい順に並び替えたいです。 番号 枝番 金額 111 1 100 111 2 100 222 1 100 222 2 100 222 3 100 333 1 100 444 1 100 444 2 100 【答え】 番号 件数 222 3 111 2 444 2 333 1 のようにorder by で並べ替えたいです。 SQL一発でできませんか? SQLに詳しい方、ご教授ください。

  • SQLのUPDATE文について

    SQL勉強中です。下記の様なデータを書き換えたいのですが、どの様なSQL文になるのでしょうか? ご教授下さいませ。 1つのテーブルに「会員NO」と「会員種別」という列がありまして、 会員氏名   会員No   会員種別 ・・・ --------------------------------- 田中一郎 1-0001 0001    ・・・ 鈴木二郎 2-0003 0001    ・・・ 会員Noの左端の数値が1なら会員種別を0001、2なら0002といった 形に振り分けたいのですが、どの様なSQL文になるのでしょうか? 自力ではなんとも上手くいきませんでした。 どうか、お助け下さいませ。

  • SQL文を教えてください

    SQL文を教えてください。 以下のテーブルがあります。 T入金 [ID] [名前] [金額] [入金日] 1, 山田, 25000, 2009/01/01 2, 佐藤, 5000, 2009/02/01 3, 山田, 30000, 2009/01/02 4, 佐藤, 45000, 2009/02/02 5, 佐藤, 10000, 2009/02/03 同じ人物で、入金額50000円に至ったときの入金日を 抽出したいと思っています。 上記データだと、 山田さんは入金日2009/01/02、 佐藤さんは入金日2009/02/02、 ということになります。 これを一つのSQL文で抽出できますでしょうか。 ご教授宜しくお願いいたします。 (Access2000のクエリで抽出しようとしていますが、Accessで無理ならSQL Server、MySQL、PostgreSQLでも可です)

  • SQL文長の制限

    PostgreSQL8.1.3にて、長いwhere句のあるSELECT文を実行したところ、 「server closed the connection unexpectedly」 のエラーとなってしまいました。 エラーとなったSQL文は317726文字で、 where句のin条件のリスト個数が非常に多くなっています。 試しに、in条件のリスト部分を減らし、 156000文字までSQL文を短く短くしたら、エラーは回避できました。 in条件ではなくor条件に変更すると、エラーとの境目のSQL文長は上記とは異なることから、 SQL文長だけが影響しているとは思えません。 SQL文を改修して、エラーを回避するにしても、ここらへんの限界値がわからないと改修できませんので、 改修の目安(信頼できるSQL文長がどのくらいなのかなど)をご教授お願いします。

  • SQL文で累積値を得る方法

    SQL文で累積値を得る方法を教えて下さい。 例えば、下の表の「累積値」のように「ある数値」列を降順で並べて、上から順に足した数を列とする感じです。 よろしくご教授お願いします。 ある数値  |累積値 1     |1 2     |3 3     |6 4     |10