【SQL】履歴から頻度順にソートして全件抽出

このQ&Aのポイント
  • 次のような通話履歴テーブルから利用頻度の高い電話番号順にソートして全件を抽出する方法を教えてください。
  • 上記の通話履歴テーブルから、利用頻度の高い電話番号を抽出する方法についてアイデアを募集しています。
  • 電話番号の利用頻度に基づいて通話履歴テーブルをソートし、全件を抽出する方法についてアドバイスをお願いします。
回答を見る
  • ベストアンサー

【SQL】履歴から頻度順にソートして全件抽出

はじめまして。 次のような通話履歴テーブルから利用頻度の高い電話番号順に ソートして全件を抽出してきたいのですが、よいアイデアが浮かびません。 わかる方がいらっしゃいましたら、お知恵を貸してください。 id  電話番号 更新日時   --------------------------- 01  1111   2013/02/17  02  2222   2013/02/17  03  3333   2013/02/17  04  2222   2013/02/16  05  3333   2013/02/16  06  2222   2013/02/10  上記のようなテーブルから以下のように抽出しようと考えております。 id  電話番号 更新日時   --------------------------- 02  2222   2013/02/17  04  2222   2013/02/16  06  2222   2013/02/10  03  3333   2013/02/17  05  3333   2013/02/16  01  1111   2013/02/17  以上、よろしくお願いいたします。

  • Oracle
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

ANO1.ですが、頻度が同じものがあるとうまくいかないですね。 TF.freqだけでなく、TF.telでもorder byするとか。

higemichel
質問者

お礼

osamuvさん ご回答ありがとうございました。 おかげで想定するデータを抽出することができました。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

こんなとか。 Oracle Database 11g Express Edition Release 11.2.0.2.0で試してます。

関連するQ&A

  • ソート順の一番若い者を取得する

    お世話になります。 Oracle SQL文で質問があります 以下のようなテーブルから【結果】のような レコードを取得したいのです id id2 が同じものでsort順が一番若いものを 取り出すSQLです。 おわかりの方よろしくお願いします。 id id2 sort 1 1 1 1 1 2 1 2 1 1 2 2 1 2 3 1 3 1 【結果】 id id2 sort 1 1 1 1 2 1 1 3 1

  • 1回のSQLで集計結果順にソートする方法を教えてください

    PHP4+MySQLです。 やりたいことがあるのですが、いいSQLが考えつきません。 お知恵を拝借できれば幸いです。 以下のようなテーブルがあるとします。 ID|ITEMid|DATE 1| 232|2009-06-14 2| 156|2009-06-14 3| 156|2009-06-14 4| 232|2009-06-14 5| 232|2009-06-14 6| 567|2009-06-14 これを次のように集計したいのです。 (ITEMidの登場回数順にソートして、実際の回数も出す) 232:3 156:2 567:1 サブクエリの使えない環境で、1回のSQLで集計することはできるでしょうか。できる場合実際のSQL文を教えていただければ幸いです。 テンポラリテーブル使えば自分でもできそうな気がするので、できれば使わない想定でお願いします。

    • ベストアンサー
    • MySQL
  • ファイルを開く等のダイアログのソート順

    各アプリの「ファイルを開く」等を選択するとダイアログが現れ、ファイルの一覧を表示 しますが、このソート順はデフォルトでは「ファイル名」の昇順になっているかと思い ます。 最近何の操作をしたのかわかりませんが、更新日時の降順になってしまいました。 詳細で表示してファイル名昇順ソートした後にファイルを選択したりキャンセルしても 直りません。 不便なので、ファイル名昇順で表示されるように戻すことはできないでしょうか?

  • SQLコマンドによるデータ抽出について

    例えば 商品マスタという商品ID、商品名、単価のフィールドを含んだテーブルと 販売履歴というID、商品ID、販売日時というフィールドを含んだテーブルがあります。 各商品の一番最後に売れた販売日時を知るために この2つのテーブルからSELECT文で商品ID、商品名、販売日時の フィールドを結果として返すSQL文を作りたいです。 各商品なので全く売れていない商品でも商品IDと商品名だけは結果に欲しいです。 どなたかSQLに詳しい方、教えてください。

  • 2つのテーブルで一致しているものを抽出する。SQL文で作成。

    OS:WindowsXP SQLServer2000 <質問> SQL文が浮かばなくて困っています。 どなかたお力を貸していただけないでしょうか。 以下、やりたいことです。 【条件】 1 AテーブルとBテーブルで郵便番号が一致しているものを抽出 2 AテーブルとBテーブルに「番号」列を追加し、初期値を「0」とする 3 1の抽出後、同じ郵便番号がBテーブルに複数あった場合、   2で追加した「番号」列を0→”抽出した行分の数字”にする。 一応、【条件】1の箇所(下記)は浮かんだのですが、 2と3が分かりません。 select Aテーブル.*,Bテーブル.* from Aテーブル,Bテーブル left outer join Aテーブル on Aテーブル.郵便番号 = Bテーブル.郵便番号 WHERE ??? ●Aテーブル ID  | 名前 | 郵便番号  | 番号 ----------------------------------------------------------------- 01 |  小林 | 101-1000 | 0 02 |  鈴木 | 102-1000 | 0 03 | 田中  | 103-1000 | 0 04 | 町田  | 104-1000 | 0 05 | 木村  | 105-1000 | 0 06 | 中田  | 106-1000 | 0 ●Bテーブル ID | 分類  | 郵便番号   | 番号 --------------------------------------------------------------------- 01 | AAA  |  101-5555  | 0 03 | CCC  | 103-1000  | 0 04 | DDD  | 104-1000  | 0 05 | EEE  | 105-1000   |  0 06 | FFF  |  105-1000   | 0 07 | GGG  | 106-1000  | 0 08  | HHH  | 106-1000   | 0 09 | KKK  | 106-1000   | 0 ↓出したい結果↓ ID  | 名前 | 郵便番号   | 分類  | 番号 ------------------------------------------------------------------------------- 03 | 田中 | 103-1000  | CCC   |  0 04 | 町田 | 104-1000  | DDD  |  0 05 | 木村 | 105-1000  | EEE  |  2 05 | 木村 | 105-1000  | FFF  |  2 06 | 中田 | 106-1000  | GGG  |  3 06 | 中田 | 106-1000  | HHH  |  3 06 | 中田 | 106-1000  | KKK  |  3 以上になります。 どうぞよろしくお願い致します。

  • 自身の結果に自身で検索?

    php+mysqlにてある予約システムを作っている者です。 mysqlのクエリ作成で行き詰ってしまったので、ご質問させていただきます。 予約テーブルにはカラムid(key)、roomID(部屋番号),startTime(予約開始日時)、endTime(予約終了日時)があります。 部屋テーブルにはカラムid(部屋番号)、部屋名等があります。 実現したいのは、予約日時が被っている部屋id、予約テーブルのidの抽出(重複した予約)です。 一覧画面にて、予約に対して重複があるかないかを表示したいです。 予約テーブルのstartTimeが他の予約開始日時から予約終了日時までの間になければ、 重複予約はないということになると考えています。 しかし行き詰ってしまった原因は、検索対象がない??ことです。 仮に開始時間だけでもWHERE句に入れられれば、 $検索対象予約開始日時 BETWEEN startTime AND endTime で検索できそうだと想像つくのですが、 その検索対象開始日時は予約テーブル内全部の予約開始日時なのです。 単純に考えると、予約テーブルのidとstartTimeを1件ずつ取得し、全件をBETWEENで検索ループなのでしょうが、 なんとかSQL1文で済ませられないかと思い、質問させていただきました。 疑問点が伝わるか不安な文章で大変申し訳ありませんが、お知恵をお貸しください。

    • ベストアンサー
    • MySQL
  • SQL-SELECT文でのソート

    VB2010とmdb(Ms-Access)にてシステムを構築しています。 Select文にて取得したレコードをDatagridviewにて表示しようとしているのですが SQL="SELECT * FROM table ORDER BY ID" 当のシンプルなものだと表示できるのですが 特定の文字列順にソートしたくCASE WHENを使用して SQL = "SELECT * FROM table ORDER BY CASE BUPPIN WHEN '○○' THEN 1 WHEN '△△' THEN 2 ELSE 0 END" のようにSQLを書いてみたのですがデータアタプタにてデータテーブルに結果を入力させる際にエラーが出てしまいます。 構文間違いでしょうか? ご教授お願いします

  • SQLで重複値を除去したものを抽出したい

    SQLで重複を除去したいのですが、DISTINCTやGROUP BYも検討したのですが、どうしても良い方法が見つからなかったので質問させて頂きます。 テーブルの構成は以下のようになっています。 roomsテーブル id(INTEGER) public(BOOLEAN) updated_at(DATETIME) created_at(DATETIME) messagesテーブル id(INTEGER) sendfrom_list_id(INTEGER) sendto_list_id(INTEGER) room_id(INTEGER)※roomsテーブルへの外部キー body(STRING) updated_at(DATETIME) created_at(DATETIME) 更に条件は以下のようになっています。 ・アウトプットとして得たいのは rooms.updated_at rooms.id rooms.public messages.room_id messages.sendfrom_list_id messages.sendto_list_id messagess.body の7カラム。 ・rooms.publicがTRUEである ・messages.room_id = rooms.idであること ・updated_atでDESCにソート このような条件を満たすSQL文は以下のように書くことができました。 SELECT R.updated_at, R.id, R.public, M.room_id, M.sendfrom_list_id, M.sendto_list_id, M.body FROM messages AS M, rooms AS R WHERE R.public = "t" AND M.room_id = R.id ORDER BY R.updated_at DESC; しかし、ここに更に「rooms.idが重複しないもののみ抽出」という条件を加えたいのですが、どうしてもうまく行きません。 DISTINCTでは複数の中から一部のカラムだけをDISTINCTすることはできないようですし、GROUP BYも考えましたがどうやれば良いかわかりませんでした。 どなたか良い方法を教えて下さい。

  • 検索結果内でのソート 及び ソート順に番号を振る方法

    よろしくお願いします。 下記のようなExcelシートがあります。 ID 検索番号 順番 データ 1 44 9252 いわし 2 8 9256 えりんぎ 3 37 9258 おちゃづけ 4 37 9258 おにぎり 5 3 9284 まつたけ 6 44 9253 うに 検索番号フィールドとデータフィールドの関係は、別のテーブルで保持している検索番号に対応するデータと親子関係のようになっています。順番フィールドには、同じ検索番号のデータ間で優先順位を決めるためのフィールドにしたいと考えています。 順番フィールドには、ExcelのCODE関数で文字コードを取得し順番を決めようとしたのですが、先頭文字のみのコード化ですので、2文字目以降が異なる場合上記ケースではうまくいきませんでした。 長々と書いてしまいましたが、教えていただきたい事は下記の通りです。 ・検索番号による結果に対し五十音順に数字をふる方法 よろしくお願いします。

  • コマンドプロンプト dir でのソート

    Windows7のコマンドプロンプトにてdirコマンドでのソートについて教えてください。 ソートするファイルはデジカメ写真群(jpeg形式)です。 ファイルが入ったフォルダでプロパティを見ると「日付時刻」「撮影日時」「アクセス日時」 「作成日時」「更新日時」があります。 推測ですが、写真を回転し保存したりして「更新日時」が変わっているのでは…と思って います。 複数のデジカメで撮った写真を撮影日時の順でソートしたくて dir/od と打つとどうやら 「撮影日時」のソートではなく「更新日時」でソートされている模様。 「撮影日時」でソートさせるにはどんなコマンドを打てばいいでしょうか? あるいはdirコマンドで「撮影日時」の情報も拾えればいいのですが....。 数百枚の写真を効率よく「撮影日時」でソートしたいです。 よろしくお願いします。 やりたいのは、リダイレクトした結果を元にファイル名を撮影日時順にナンバリングしたい のです。(意味通じます?)