0

というテーブルがmaximo_productsあり、 というフィールドがありますproduct_date

2014 年 1 月から 2014 年 12 月までの形式でmaximo_products表にないすべての個別の日付を表示する必要があります。MON-YYYY

どうすればこれを行うことができますか?

テーブル構造とレコードを持つSQLFiddle 。

サンプル出力 (表にない日付)

MAR-2014
APR-2014
JUN-2014
JUL-2014    
SEP-2014
4

1 に答える 1

1

不足している月を取得するには、すべての月を生成する必要があります。以下は、12 か月を取得するための簡単な定式化を使用します。次にnot in、値がないものを特定するために使用します。

with mons as (
      select rownum r, add_months('01-JAN-2014', rownum - 1) as mon
      from dual
      connect by rownum <= 12
     )
select *
from mons 
where not exists (select 1
                  from maximo_products mp
                  where to_char(mp.product_date, 'YYYY-MM') = 
                        to_char(mons.mon, 'YYYY-MM')
                 )
order by r;

編集:

の定義をmonsサブクエリに移動できます。

select *
from (select rownum r, add_months('01-JAN-2014', rownum - 1) as mon
      from dual
      connect by rownum <= 12
     ) mons 
where not exists (select 1
                  from maximo_products mp
                  where to_char(mp.product_date, 'YYYY-MM') = 
                        to_char(mons.mon, 'YYYY-MM')
                 )
order by r;
于 2014-03-12T11:21:08.797 に答える