2015-11-20 57 views
1

重要統計數據: Oracle 11i 我沒有權限創建表或任何類型的寫入權限。Oracle SQL將每天的所有打開任務累加起來

目標:

我需要創建一個查詢,將着眼於過去12個月的行動,並計數(每天)許多行爲是如何被打開的每一天。這必須是沒有硬編碼值的動態查詢。

我定義一個「打開」項目的方式是,它在有問題的日期當天或之前獲得批准,並在當天或之後發佈。

我曾嘗試:

我發現這裏一個類似的問題,這是不是非常好措辭,並沒有答案。 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; 

我相信這個問題是「i.aggdate = osd.date_approved」因爲這會導致查詢,以只添加批准當天有問題的項目,我想算批准日或之前的所有項目有問題的那一天。我需要做一些明確的連接,以避免外部(我認爲)加入,只是創建混亂。

在FROM子句中選擇的目的是創建一個至少有一個項目被批准的天數列表,因爲我知道每個工作日至少會有一個項目被批准。 我的意圖是,然後用每天的計數填充該日期列表。

最後總結式提問:

如何創建日期的數組,然後在查詢由該系統具有計數時日期後或等於日期1(批准日期)填寫之前或等於date2(發佈日期)。

我提前感謝您閱讀這個長長的問題。我更加感謝所有建設性的反饋和想法。

乾杯,

回答

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子句。
  • 超過一年前的所有批准都在同一日期進行對齊。
  • 然後外部查詢只是按天計算累計和。

如果不是所有的日子都包含在結果集中,你可以將它們包括在dates0inc值。

+0

Gordon,謝謝你的幫助。這感覺就像是正確的方向,但我得到的結果比它們應該大兩個數量級。感覺像缺少的一點是計數包圍是不正確的。似乎這包括既被批准也被釋放的項目,而不需要在批准之前或之後批准,或者批准之前或之後批准。我誤解了這一點,並且包圍是以某種方式隱含的? – Corey

+0

@Corey。 。 。你確定你在第二個子查詢中有'inc'的負號嗎?是否有可能在SQL Fiddle中顯示問題? –

+0

戈登,對於長時間的耽擱感到抱歉,我因感恩節假期休假。我開始把這東西放在sql小提琴中,但它給了我錯誤消息,說明每一行中的列數對於直接的CSV數據是錯誤的。今天晚些時候我會繼續努力。 – Corey