SQLコードで運賃の値上がり(値下がり)を確認する方法

このQ&Aのポイント
  • SQLを使用して、運賃テーブルの前日分と比較し、値上がり(値下がり)があった路線を抽出する方法について教えてください。
  • 運賃テーブルの前日分と比較し、値上がり(値下がり)があった路線を一目で分かるように表示するためのSQLコードを教えてください。
  • 運賃テーブルのデータを選択する方法と、前日分と比較して値上がり(値下がり)があった路線を抽出する方法について教えてください。
回答を見る
  • ベストアンサー

SQL 前日分と相違があればアラート

いつもお世話になっております。 表題の件について教えてください。 使用SQL:Oracle 例えば下記のようなテーブルがあるとします。 【運賃テーブル】 日付   出発  到着 運賃 10月1日 東京 青森 8000円 10月1日 東京 大阪 5000円 10月1日 東京 福岡 8000円 10月1日 青森 大阪 6000円 10月1日 青森 福岡 9500円 10月1日 大阪 福岡 5000円 10月1日 大阪 青森 9800円 10月2日 東京 青森 8000円 10月2日 東京 大阪 5000円 10月2日 東京 福岡 8500円 10月2日 青森 大阪 6000円 10月2日 青森 福岡 9500円 10月2日 大阪 福岡 5000円 10月2日 大阪 青森 9000円 仮に運賃を日付で比較した場合、下記のようになります。 【運賃比較】       10月1日 10月2日 東京 青森 8000円 8000円 東京 大阪 5000円 5000円 東京 福岡 8000円 8500円 青森 大阪 6000円 6000円 青森 福岡 9500円 9500円 大阪 福岡 5000円 5000円 大阪 青森 9800円 9000円 この場合、値上がりがあったら、下記の様に 値上がり(値下がり)があった路線について一目で分かる SQLコードはどの様にかけば良いのか教えてください。 【運賃変更】 出発 到着 10月1日 10月2日 東京 福岡 8000円 8500円 大阪 青森 9800円 9000円 もし上記が可能であるならば、【運賃比較】テーブルの様に データを選択剃る方法についてもご教授ください。 よろしくお願いいたします。

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

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

  • ベストアンサー
  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

あなたの想いとは違うかもしれないけど -- 運賃比較 SELECT 日付, 出発, 到着, 運賃, LAG(運賃) OVER (PARTITION BY 出発, 到着 ORDER BY 日付) AS 前日 FROM 運賃テーブル; -- 運賃変更 SELECT * FROM ( SELECT 日付, 出発, 到着, 運賃, LAG(運賃) OVER (PARTITION BY 出発, 到着 ORDER BY 日付) AS 前日 FROM 運賃テーブル ) WHERE 運賃 <> 前日;

ice1982
質問者

お礼

dda167さん さっそくありがとうございました。 本日【運賃変更】の方を試しましたところ 考えていた通りのデータがExportされました。 SQLのコードだけでもある程度の事はできるのだと分かったことも 非常に大きな収穫となりました。 また質問させていただくこともあるかと思います。 その際はまたぜひお付き合いください。 よろしくお願いいたします。

関連するQ&A

  • SQL 前日分と相違があればアラート その2

    いつもお世話になっております。 以前下記についてお伺いいたしました。 今回はその続編です。 http://okwave.jp/qa/q7772587.html 何卒ご教授ください。 よろしくお願いいたします。 例えば下記のようなテーブルがあるとします。 【運賃テーブル】 日付   出発  到着 運賃 10月1日 東京 青森 8000円 10月1日 東京 大阪 5000円 10月1日 東京 福岡 8000円 10月1日 青森 大阪 6000円 10月1日 青森 福岡 9500円 10月1日 大阪 福岡 5000円 10月1日 大阪 青森 9800円 10月2日 東京 青森 null 10月2日 東京 大阪 5000円 10月2日 東京 福岡 8500円 10月2日 青森 大阪 6000円 10月2日 青森 福岡 9500円 10月2日 大阪 福岡 null 10月2日 大阪 青森 9000円 10月3日 東京 青森 8000円 10月3日 東京 大阪 5000円 10月2日 東京 福岡 8500円 10月2日 青森 大阪 6000円 10月2日 青森 福岡 9500円 10月2日 大阪 福岡 5500円 10月2日 大阪 青森 9000円 仮に運賃を日付で比較した場合(上記を水平展開した場合) 下記のようになります。 【運賃比較】       10月1日 10月2日 10月3日 東京 青森 8000円 ------ 8000円 東京 大阪 5000円 5000円 5000円 東京 福岡 8000円 8500円 8500円 青森 大阪 6000円 6000円 6000円 青森 福岡 9500円 9500円 9500円 大阪 福岡 5000円 ------ 5500円 大阪 青森 9800円 9000円 9000円 ここからが前回と違うのですが 上記の場合、nullがあったら、さらにその前日と 比較する方法を教えていただきたいのです。 ※ 最悪、比較データがない場合、過去1週間前   までさかのぼる必要がでることもありえます。 つまり上記でいえば 10月3日の料金は前日値と比べ… 【運賃変更】 東京 青森 変更なし 東京 大阪 変更なし 東京 福岡 変更なし 青森 大阪 変更なし 青森 福岡 変更なし 大阪 福岡 変更あり 大阪 青森 変更なし もしくは 大阪 福岡 変更あり の様に、「大阪 福岡」に変更があったことを アラート表示させたいのです。 【その他条件】 ・このSQLコードは毎日回します ・前日にもデータがなく、前々日のデータと  比較しなくてはならないこともあります。  もしくは過去1週間ほどさかのぼらないと  比較対象のデータがないこともあります。 ・case文を使って【運賃比較】の様なテーブルを作り  ローカルでVBA等で比較させることも考えましたが  データが大量すぎて、その方法は使えませんでした。 ・【運賃テーブル】の様な状態でデータをexportし  それをローカルのExcelでピボットをかけるという方法も  同様な理由で不可能でした。 何卒よろしくお願いいたします。

  • SQLローダーについて

    カンマ区切りで""で囲まれたCSVファイルがあります。 例) "1","東京","おとこ","山田太郎","","","" このデータをOracle 9iデータベースにinsert、updateするプログラムをVBで書いたのですが パフォーマンスが悪いのでSQLローダーでやりたいと考えています。 更新テーブルはひとつなのですが、"東京"なら1、"大阪"なら2、"福岡"なら3というようにデータを突っ込む前に比較・変換する必要があります。 このような場合でも、SQLローダーって使えるんでしょうか? よろしくお願いします。

  • SQL 集計について

    集計方法がどうしてもわからないのでご教授ください。 下記のテーブルを持っています。 テーブル1では日々の売上金額を管理し、 テーブル2では一週間の日付が保存されています。(月曜日~日曜日) -------テーブル1-------           日付    売上金額   2013/09/01     3000   2013/09/02     4000   2013/09/03     2000    ・              ・           ・           2013/09/30     1000 ----------------------- --------テーブル2---------  日付(月)    日付(日)    2013/08/26   2013/09/01 2013/09/02   2013/09/08    ・        ・    ・       2013/09/30   2013/10/06 ------------------------- テーブル1とテーブル2の情報をもとに テーブル3にある、日付(月)と日付(日)は、テーブル2から持ってきて、 一週間の集計を行いたいと思っております。 --------------テーブル3--------------  日付(月)    日付(日)    売上金額 2013/08/26  2013/09/01     3000 2013/09/02  2013/09/08     6000   ・   ・   ・ 2013/09/30  2013/10/06     1000 ------------------------------------ このようにするにはどのようなSQLを組めばいいのでしょうか? SQL初心者のため、難しい単語などを使わずに ご説明をしていただければと思います。 どうぞ、よろしくお願いいたします。

  • SQLを教えてください

    下記のような場合のSQLがわからなくて困っています ご回答よろしくお願いします 日単位に買い物リストを作っています 2月1日 タバコ 書籍  ラーメン 2月2日 本   ジュース 2月3日 タバコ ラーメン 2月4日 タバコ 条件1:商品は1万種類以上 条件2:1日の購入商品数は最大100 条件3:抽出条件も最大100 上記の場合でタバコとラーメンを買った日 (2月1日と2月3日)が知りたいのですが SQLが分かりません 思いついたのが | Field | Type | Key | +---------+------+------+ | date  | date | PRI | | syouhin| text |    | +---------+------+------+ このshouhinに商品名または商品IDを連続で書いて もってこれないかな?と思ったりしましたが むりそうですよね?・・・ 上記のテーブルで抽出結果を更に抽出・抽出・・・・ とすれば可能ですが、条件にも書いたとおり 抽出対象の商品が最大100になります このような条件で抽出(SQL発行数は少なくして)するにはどうすればいいのでしょうか? よろしくお願いします

    • ベストアンサー
    • MySQL
  • 項目数分レコードにしたい

    テーブルには住所履歴が格納されていて 氏名 履歴1 履歴2 履歴3 ------ ------- ------- ----- aさん 北海道 東京 沖縄 bさん 岩手 東京 cさん 大阪 兵庫 福岡 というデータがある場合、 下のような結果に表示させるSQLを教えてください。 氏名 履歴 ------ ------- aさん 北海道 aさん 東京 aさん 沖縄 bさん 岩手 bさん 東京 cさん 大阪 cさん 兵庫 cさん 福岡 よろしくおねがいします。

  • ACCESS2000のSQLについて

    ACCESS2000のSQL文について質問です。 K情報テーブル:(支店(テキスト型),所属(テキスト),氏名(テキスト),ログ(テキスト),抽出件数(数値),処理日(日付型)) 支店 所属 氏名 ログ 抽出件数 処理日 ----------------------------------------- 関東 埼玉 太郎 A   50    2009/02/25 関西 大阪 次郎 B   15    2009/04/01 関東 埼玉 太郎 A   10    2009/03/05 関西 大阪 次郎 B   5    2009/04/06 東北 青森 三郎 C   2    2000/01/02 東北 青森 三郎 A   2    2000/01/02 ・ ・ ・ ----------------------------------------- 以上のテーブル情報を、SQL文にて抽出したいのですが、抽出条件が私には難解で解決の見通しが立ちません。ご教授をお願いします。 ***条件*** [ログ] = "A" のみ抽出。 現在日から過去3ヶ月前までのデータのみ抽出。 [氏名]ごと[ログ]の総合計。 [氏名]ごとの[抽出件数]の総合計。 [ログ]の総合計の上位30件を降順で。 順位にNo.をふる。 上記の条件で抽出したデータをを下記の作業テーブルに出力したと思っております。 作業テーブル:順位,所属,氏名,ログ件数,抽出件数 宜しくお願いします。

  • SQL文のとり方を教えてください。

    以前同内容で質問させていただきましたが、 再度依頼させていただきたく投稿しました。 下記図を参照願います。 1件の依頼No.にぶらさがる配送先が3か所あります。 この中で一番新しい(=若い)日付の 配送日&到着日をとりたいです。 配送日と到着日はワンセットと考えて、 新しい日付の配送日がとれたら、自動的に隣の到着日もとれるイメージです。 (例でいけば上から2つ目の配送日:20110106 到着日:20110107) どういう風にSQL文を書いたらいいかわかりません。 どなたか教えて頂けませんか? <テーブルA> 依頼No.  <テーブルB> 依頼No.  枝番 配送日 到着日 依頼No.  枝番     配送日  到着日 1111     1      20110107   20110108 1111     2      20110106   20110107 1111     3      20110108   20110109

  • SQLの書き方について教えてください。

    SQL Server2000で下記のようなSQL文を書きたいと思っています。 テーブルAとテーブルAに無関係な2個のフィールドを 持つテーブルBがあり、テーブルAのデータをテーブルBにコピー したいと考えています。その際にテーブルBの2個のフィールドに対して 決められた値を挿入したいのですがどのように記述すればよいのか わかりません。 お分かりの方お教えいただけませんでしょうか よろしくお願いいたします。 下記の記述をしています。 INSERT INTO テーブルB ( A, B, C, D ) SELECT テーブルA.A, テーブルA.A, XXX1, XXX2 FROM reserveSETdateTRN; Cに東京 Dに品川 を入れたいと思っています

  • SQLとデータベースについて?

    すいません質問させてください。 2つのデータベースがあります。 データベース名が -------------- SC CM -------------- の2つです。 そこに複数のテーブルがあります。 そこで質問なのですが、SCのデータベースのテーブル名AAAとCMのデータベースのテーブル名がBBBの 中から列名の店コードが違う物だけ抽出したいです。 ------------------------------- データーベースSC テーブルAAA 店コード、店名、店地域 123,あ,東京 231,い,大阪 312,う,京都 111,え,福岡 ------------------------------ ------------------------------- データーベースCM テーブルBBB 店コード、店地域 123,東京 111,福岡 ------------------------------ 上の様な造りになっています。 抽出結果 ----------------------------- 店コード、店名、店地域 231,い,大阪 312,う,京都 ---------------------------- 私なりの考えなのですが SELECT * FROM AAA,BBB where AAA.店コード <> BBB.店コード このSQL文を改変して出来ると思われますか? SCのデータベースからCMのデータベースを比べることは、出来ますか? よろしくお願いします。

  • SQL文を教えて下さい

    2つのテーブルを比較して、片方のテーブルにしかない データを検索したいのですが、どのようなSQL文に なるのか 教えて下さい。 下記の例だと、AテーブルとBテーブルの両方にあるデータ以外のデータを検索したいので、下記の結果になります。よろしくお願いします 期待される結果 003 さああ 004 いいい 005 ううう 例 Aテーブル 001 あいう 002 えおお  003 さああ 004 いいい 005 ううう Bテーブル 001 あいう 002 えおお