- ベストアンサー
10営業日前の日付を取得する方法
- 各部署の10営業日前の日付を取得する方法を教えてください。
- 特定の日付から10営業日前の日付を計算する方法について相談です。
- ある休日テーブルを使って、各部署の10営業日前の日付を求める方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あまり深く考えていませんので、件数が多いと使いものにならないかもしれません。 with 休日テーブル as ( select 'busyo1' 部署コード, date'2014-09-13' 休日 from dual union all select 'busyo1' 部署コード, date'2014-09-14' 休日 from dual union all select 'busyo1' 部署コード, date'2014-09-20' 休日 from dual union all select 'busyo1' 部署コード, date'2014-09-21' 休日 from dual union all select 'busyo1' 部署コード, date'2014-09-23' 休日 from dual union all select 'busyo2' 部署コード, date'2014-09-07' 休日 from dual union all select 'busyo2' 部署コード, date'2014-09-14' 休日 from dual union all select 'busyo2' 部署コード, date'2014-09-21' 休日 from dual union all select 'busyo3' 部署コード, date'2014-09-20' 休日 from dual ) , 日付 as ( select trunc(/* sysdate */ date'2014-09-24' - 1) - level 日付 from dual --とりあえず過去30日分の日付 connect by level <= 30) select 部署コード, 日付 from ( select 部署コード, 日付, count(*) over(partition by 部署コード order by 日付 desc) cnt from (select distinct 部署コード from 休日テーブル) 部署マスタ cross join 日付 where not exists ( select * from 休日テーブル where 部署マスタ.部署コード = 休日テーブル.部署コード and 日付.日付 = 休日テーブル.休日 ) ) where cnt = 10; こまかい説明を書く時間がないので、そこはSQLから読みとってください。すみません・・・
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
元のデータは何件あるんですか? レコード数ではなくて、日付の数。 Excelにでもコピペして、Update文を作るほうが簡単かも。
補足
元のデータの件数は過去20年分は入っているそうなので1部署あたり約2400件です。 (もう少し少ない部署もあります) ちなみに部署は約100種類あります。 アドバイス頂いた「Excelにコピペ」という意味がよくわからずに書いてしまいますが、このSQLは大規模なシステムの1部で使われます。 その画面の1つのそのまた1つの項目に使われるものなので、もしユーザ様にExcelを使わせるような想定をされているのならそれは無理なのです。 (少し寝たらひらめくかな、と期待しましたが朝になっても全くひらめきません。困りました。。)
お礼
いえいえ、SQLから自分で読み解くのは当たり前だと思っています。 教えていただけただけでも大変ありがたく感じております。 さすがにはじめて見る記述だらけで解読に手間取りましたが おかげさまで無事に一日を終えることができました。 ありがとうございました。