表中不存在显示不同的日期

时间:2014-03-12 10:52:54

标签: sql oracle oracle10g sqlfiddle

我有一个名为maximo_products的表,并且有一个名为product_date的字段。

我需要以maximo_products格式显示MON-YYYY表中没有的所有不同日期 2014年1月至2014年12月之间。

怎么做呢?

带有表格结构和记录的

SQLFiddle

示例输出(表中没有的日期)

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

1 个答案:

答案 0 :(得分: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;