【问题标题】:Oracle join dual daterangeOracle 加入双日期范围
【发布时间】:2016-11-01 10:27:48
【问题描述】:

我正在尝试将数据放入双重查询的日期范围中。结果应如下所示:

SINGLEDAY       FLAG
01-NOV-2016     1
02-NOV-2016     -
03-NOV-2016     -
04-NOV-2016     1
05-NOV-2016     -

对于我正在使用的天数列表

select (to_date('11.2016','mm.yyyy')+level-1) as SINGLEDAY
from dual
connect by level <= TO_CHAR(LAST_DAY(to_date('11.2016','mm.yyyy')),'DD')

但是如何将我的表 xyz 的内容与结果连接起来?表 xyz 应通过 DATE_OF_SERVICE(日期)列连接。任何帮助将不胜感激。

【问题讨论】:

  • 如何从选择 to_date(09.2016) 的查询中获得 01-NOV?在您的地区,第九个月是 11 月?你更有可能是在错误陈述事实。不酷!
  • 对不起,mathguy,你是对的 09.2016。我将其更改为 11.2016。反正。根据 01-NOV:默认情况下,日期是从我的 oracle 实例中给出的。我渲染它的格式并不重要。连接似乎是这样处理的。

标签: sql oracle join dual-table


【解决方案1】:

这基本上是您查询中的left join。假设每个日期的表格中最多有一行:

with d as (
      select (to_date('09.2016','mm.yyyy')+level-1) as singleday
      from dual
      connect by level <= TO_CHAR(LAST_DAY(to_date('09.2016', 'mm.yyyy')), 'DD')
     )
select t.singleday,
       (case when t.date_of_service is not null then 1 end) as flag
from d left join
     t
     on d.singleday = t.date_of_service
order by d.singleday;

如果有多个,那也许你group by

with d as (
      select (to_date('09.2016','mm.yyyy')+level-1) as singleday
      from dual
      connect by level <= TO_CHAR(LAST_DAY(to_date('09.2016', 'mm.yyyy')), 'DD')
     )
select t.singleday, count(t.date_of_service) as cnt
from d left join
     t
     on d.singleday = t.date_of_service
group by d.singleday
order by d.singleday;

【讨论】:

    猜你喜欢
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2017-04-27
    • 2011-01-19
    • 1970-01-01
    • 2014-06-09
    • 2019-01-24
    相关资源
    最近更新 更多