【问题标题】:Display Distinct Dates Not Exist In Table显示表中不存在的不同日期
【发布时间】:2014-03-12 10:52:54
【问题描述】:

我有一个名为maximo_products 的表和一个名为product_date 的字段。

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

如何做到这一点?

SQLFiddle 带有表结构和记录。

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

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

【问题讨论】:

  • 不清楚你想收到什么。
  • @Avt 在我的表格中,我有 JAN、FEB、MAR、MAY、AUG 等不同的日期。我想显示表格中不存在的不同日期。
  • 更改您的输出样本。它包含JUN 两次
  • @Avt 输出示例已编辑,谢谢

标签: sql oracle oracle10g sqlfiddle


【解决方案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;

【讨论】:

  • 如果没有with 子句,这可以实现吗?
猜你喜欢
  • 2016-03-13
  • 2015-03-19
  • 1970-01-01
  • 2013-12-07
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多