0

我试图在升序的日期序列中获取所有缺失的日期。如何在不使用任何函数或 udfs 的情况下使用简单的 sql 来做到这一点。

Input :-

2016-09-01
2016-09-02
2016-09-05
2016-09-10

输出 :-

2016-09-03
2016-09-04
2016-09-06
2016-09-07
2016-09-08
2016-09-09

我试过什么?

  select start, stop 
    from
       (
          select m.x + 1 as start,
                 (select min(x) - 1 from X as x where x.x > m.x) as stop
            from X as m
           left outer join X as r
              on m.x = r.x - 1
           where r.x is null
        ) as x
  where stop is not null;
4

1 回答 1

-1
  1. 创建一个新表并插入编号为 1-365 的 365 行(或者使用已经有超过 365 行的表并使用 rownum 或类似构造来获取唯一整数)

  2. 将您的日期转换为整数(在 Oracle 中使用类似的东西TO_CHAR( mydate, 'ddd' )

  3. 在您的查询中将这两个列表连接在一起以找到适当的集合(重叠、缺失等)

  4. 转换回日期

于 2016-10-03T22:16:04.127 回答