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 回答