2016-08-15 14 views
0

を考えると、これらのテナント契約:抽出財務年

TENANCY_ID Financial_Year 
---------- -------------- 
1   2013-2014 
2   2012-2013 
2   2013-2014 
2   2014-2015 
2   2015-2016 
4   2014-2015 
4   2015-2016 
:私のような長いテーブルを作成したい

TENANCY_ID FROM  TO 
---------- ---------- ---------- 
1   2013-05-02 2013-08-12 
2   2012-06-22 2015-09-01 
4   2014-06-03 2015-11-15 

:これらの日付以上続い

  2012  2013  2014  2015  2016 
YR  |   |   |   |   |  
FIN_YR  | 2012-2013 | 2013-2014 | 2014-2015 | 2015-2016 |  
      ____________________________________________________ 
1   ----------------++++-------------------------------- 
2   -----+++++++++++++++++++++++++++++++++++++++-------- 
4   -----------------------------++++++++++++++++++----- 

ここで、Financial_Yearは、少なくとも部分的に、各賃貸借契約に係る財務年度(4月1日〜3月31日)続きました。

該当する場合は、です。それ以外の場合は、一般的な解決策が有効です。

+0

こんにちは、財務年度のリストをどこかにお持ちですか? – Razzka

+0

はい、テーブル(年INT)にあります。 – Orion

+0

2013年の場合は2012年-2013年ですか、2013年-2014ですか? – Razzka

答えて

1

申し訳ありませんが、手元にDB2を持っていない、ここでの例では、Oracleである:年の開始や終了が入居開始\端部との間にある場合:

with financial_years as (
     select to_char(r) || '-' || to_char(r + 1) as year, 
      to_date('01.04.' || to_char(r),'dd.mm.yyyy') as date_begin, 
      to_date('31.03.' || to_char(r + 1) || '23:59:59','dd.mm.yyyy hh24:mi:ss') as date_End 
     from t_fin_year -- here's a table (year INT) 
    ) 
    select y.year, 
      t.id 
    from t_tenancy t 
    join financial_years y 
     on y.date_begin between t.from and t.to 
     OR y.date_end between t.from and t.to 
    order by t.id, y.year; 

主なアイデアは、入居WIA日付で金融年に参加することですテナントは今年に属します。

+0

まず、型の精度が異なる場合には、包括的な上限( '<=')、排他的な上限( '<')を使用するべきではありません(例えば、すべてのRDBMS上のタイムスタンプ分数秒の小数点以下桁数)。したがって、日付/時刻/タイムスタンプの型に 'BETWEEN'を使用しないでください。第2に、実際には複数の(2年を超える)テナントの正しい結果を返すことはありません。これらのケースでは、開始/終了データの一部ではない年が中央にあるからです。 –

関連する問題