質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

1213閲覧

入庫日と出庫日から車両番号毎の貸出日一覧を取得したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/06/12 07:49

以下の【明細テーブル】から【結果】の一覧を取得したいと思っています。
どうぞよろしくお願いいたします。

【明細テーブル】
車両番号 出庫日 入庫日
001 2018/05/06 2018/05/08
002 2018/05/03 2018/05/08
003 2018/05/05 2018/05/06

【結果】
車両番号 貸出日
001 2018/05/06
001 2018/05/07
001 2018/05/08
002 2018/05/03
002 2018/05/04
002 2018/05/05
002 2018/05/06
002 2018/05/07
002 2018/05/08
003 2018/05/05
003 2018/05/06

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

出庫日と入庫日の差がその期間の日数。(出庫日と入庫日は日付型を想定)
内部的に生成した連番とその日数を結合し、取得した連番を出庫日に加算して貸出日とする。
※seqrange が連番の範囲で0始まりとしています。
上限については貸出最長日数などの十分な日数を設定して下さい。

あまり大きな連番でなければ大丈夫だとは思いますが、性能などは未検証です。

SQL

1with 2 seqrang as (select 0 as seq_from, 99 as seq_to from dual) 3, seqlist as ( 4 select seq_from + rownum - 1 as seq from seqrang 5 connect by level <= seq_to - seq_from + 1 6) 7select 車両番号, 出庫日+seq as 貸出日 8from 明細テーブル t1 inner join seqlist t2 9 on t2.seq <= (t1.入庫日 - t1.出庫日) 10order by 車両番号, 出庫日+seq

※orlofskyさんの回答にあるリンクのほうが連番は簡潔そうだったので書換

投稿2018/06/12 09:02

編集2018/06/12 09:31
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/14 03:53

思っていた情報をとる事ができました。ありがとうございます。
guest

0

連続した日付を取得 を参考にされては?
質問のSQLで使っているテーブルのCREATE TABLE程度は載せた方がコメントが付き易いです。

投稿2018/06/12 07:54

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/12 08:04

ご回答ありがとうございました。気をつけます。
guest

0

予めカレンダーテーブルをつくっておくのが確実で汎用性が高い
それがいやならprocedureで自動でカレンダーをつくるか手もありますが
面倒なのであまりおすすめはしません

投稿2018/06/12 08:41

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問