Oracle范围查询

时间:2013-01-29 13:27:16

标签: sql

我在这个网站上发现了这个查询(稍微修改过它),它运行正常。但是,结果集不显示count(*)为0的范围间隔。我尝试使用NVL函数和左联合,但无法使其工作。有任何想法吗? (见下面的查询)

由于

select
    count(*) "# PRs Created",to_char(date_created, 'yyyy-mm-dd') as "Date Created",
    to_char(date_created, 'hh24') || ':00:00 - ' || to_char(date_created + 1/24, 'hh24') || ':00:00' RANGE 
    FROM pr
    where date_created between to_date(SYSDATE - 1000)and to_date(SYSDATE)
    and 1 * to_char(date_created, 'hh24') between 0 and 24
    group by to_char(date_created, 'hh24'), to_char(date_created + 1/24, 'hh24'),to_char(date_created, 'yyyy-mm-dd')
    order by to_char(date_created, 'yyyy-mm-dd'), RANGE  desc

1 个答案:

答案 0 :(得分:0)

对于不存在的时间间隔,您不会得到零条目,因为没有任何可计数。要使其工作,您需要外连接到日期时间表:

with dates as (
  select trunc(sysdate)-1000 + (rownum-1)/24 dt
  from   dual
  connect by level <= 1000 * 24
)
select dates.dt, count(pr.date_created) from pr, dates
where  trunc(pr.date_created (+), 'hh24')= dates.dt
group  by dates.dt;

with子句创建一个数据“表”,其中包含sysdate-1000和今天(查询中的条件)的每小时。您需要将pr外部联接到此处才能查看pr中没有条目的行的行。