生命统计: Oracle 11i 我没有权利为此事创建表或任何类型的写访问权。
目标:
我需要创建一个查询,查看最近12个月的操作并计算(每天)每天开放的操作数量。这必须是没有硬编码值的动态查询。
我定义" Open"的方式项目是指在相关日期当天或之前获得批准,并在相关日期当天或之后发布。
我尝试了什么:
我在这里发现了一个类似的问题,这个问题并没有得到很好的表达,也没有得到答案。 SQL count open tasks each day
这导致另一个问题有一些不同的想法,但不是我正在寻找的格式,因为我想最终有很多行。
SQL Count Of Open Orders Each Day Between Two Dates
以下是我迄今为止关闭的代码,但不包括我将在代码后描述的一些结果。
SELECT I.aggDate ,
eri.organization_id ORG,
COUNT( (
CASE
WHEN OSD.date_approved < I.aggDate + interval '1' DAY
AND osd.date_released > I.aggDate - interval '1' DAY
THEN 1
END)) Items_in_DC
FROM mm_oracle_sig_dates osd ,
ENG_REVISED_ITEMS ERI ,
(SELECT DISTINCT OSD.date_approved aggDate
FROM mm_oracle_sig_dates osd
WHERE OSD.date_approved >=TRUNC(sysdate) - interval '12' MONTH
) I
WHERE i.aggdate = osd.date_approved
and eri.change_notice = osd.ecn_num
GROUP BY I.aggdate ,
eri.organization_id;
我确信问题是&#34; i.aggdate = osd.date_approved&#34;因为这会导致查询仅添加当天批准的项目,我想要计算在相关日期或之前批准的所有项目。我需要做一些明确的连接,以避免外部(我认为)加入只会造成混乱。
FROM子句中select的目的是创建一个至少有一个项目被批准的日期列表,因为我知道每个工作日至少会批准一个项目。 我的意图是在那个日期列表中填入每天的计数。
最终总结问题:
如何创建一个日期数组,然后通过让系统计算当该日期等于或等于date1(批准日期)和之前或等于date2(发布时)来填写查询日期)。
我提前感谢你阅读这个长期的问题。我更感谢所有建设性的反馈和想法。
干杯,
答案 0 :(得分:0)
生成所有日期的列表,并指示开放计数是增加1(已批准)还是减少一(已释放)。然后,累积金额是你的答案。以下查询执行此操作,但您可能需要调整结果:
with dates as (
(select greatest(osd.date_approved, trunc(sysdate) - interval '1 year' - interval '1 day') as dte,
count(*) as inc
from mm_oracle_sig_dates osd
where osd.date_released >= trunc(sysdate) - interval '1 year' or
osd.date_released is null
group by osd.date_approved
) union all
(select osd.date_released + 1 as dte, -count(*) as inc
from mm_oracle_sig_dates osd
where osd.date_released >= trunc(sysdate) - interval '1 year' or
osd.date_released is null
group by osd.date_released
)
)
select dte,
sum(sum(inc)) over (order by dte) as openitems
from dates
group by dte;
注意:
dates
按批准和发布日期汇总数据。请注意,发布日期增加1以符合您的业务规则。where
子句。如果结果集中未包含所有日期,则可以将其包含在dates
中,inc
值为0
。