我有一个名为maximo_products
的表,并且有一个名为product_date
的字段。
我需要以maximo_products
格式显示MON-YYYY
表中没有的所有不同日期
2014年1月至2014年12月之间。
怎么做呢?
带有表格结构和记录的示例输出(表中没有的日期)
MAR-2014
APR-2014
JUN-2014
JUL-2014
SEP-2014
答案 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;