2017-05-19 58 views
0

我想知道是否可以通過計算各種狀態之間的差異來獲得一些幫助。 我有一列名爲「id」,「create_dt」和「status」的視圖。我會有各種狀態,如提交,批准,交付等現在,我想找到一個特定的ID在批准和提交狀態之間花費的時間。我現在的想法是,根據狀態創建幾個額外的字段(我可以使用case語句),並找出各個狀態新創建的日期列之間的時間差異。 這裏的問題是,我不知道如何驅動基於特定ID的計算。我不能做滯後或領先,因爲一些「id」可能會經歷不同的狀態,有些可能不會(這不一致)。 我無法創建基於id的新日期列(類似於partition by),因爲我正在使用case語句。 有人能指點我正確的方向嗎?在denodo中創建一個新的列/字段OVER ID

下面是我的數據當前的樣子(使用case語句)和我的期望輸出的截圖。 Current Result

Expected Result

從預期的結果,我可以很容易地找到使用case語句,而當前產生的任何ID提交批准狀態之間的區別,我不能。

謝謝,

回答

1

我會嘗試透視數據。下面是一個Denodo社區網站,顯示如何做到這一點的鏈接:

https://community.denodo.com/kb/view/document/How%20to%20Pivot%20and%20Unpivot%20views?category=Combining+Data

針對您的特殊情況下,我創建了一個小型的Excel數據源,以模擬您的問題在一個視圖中我命名爲「p_sample」(使用簡化日期和狀態名稱):

id |狀態| create_dt
1 |提交    | 1/1/2017
1 |批准| 2/1/2017
1 |交付    | 2/2/2017
2 |提交    | 2017年1月1日
2 |批准| 1/10/2017
2 |交付    | 2/1/2017
3 |提交    | 2017年1月1日
....

由於Denodo似乎並不支持PIVOT操作,相反,我們可以使用下面的VQL所以他們都在同一行轉動你的狀態日期:

select id 
    , max(case when status = 'submit' then create_dt end) as submit_dt 
    , max(case when status = 'approve' then create_dt end) as approve_dt 
    , max(case when status = 'deliver' then create_dt end) as deliver_dt 
    , max(case when status = 'reject' then create_dt end) as reject_dt 
    , max(case when status = 'other' then create_dt end) as other_dt 
from p_sample 
group by id 

然後我們可以使用查詢作爲內嵌視圖執行日期數學(或Denodo你可以把這個2次 - 一個與上述VQL,然後最重要的是選擇視圖,其應用日期數學):

select *, approve_dt - submit_dt as time_to_aprove 
from (
select id 
    , max(case when status = 'submit' then create_dt end) as submit_dt 
    , max(case when status = 'approve' then create_dt end) as approve_dt 
    , max(case when status = 'deliver' then create_dt end) as deliver_dt 
    , max(case when status = 'reject' then create_dt end) as reject_dt 
    , max(case when status = 'other' then create_dt end) as other_dt 
from p_sample 
group by id 
) AS Pivot 

運行此操作時,您會獲得該ID的每個狀態日期以及提交和批准之間的時間。

Query Results

唯一的缺點是,如果狀態代碼列表是非常大的或不能很好地控制,那麼這種解決方案是不夠靈活,但是你的例子似乎表明這不會是一個問題。

+0

謝謝,凱爾。我正在嘗試上面提到的Denodo鏈接,但它無法通過圖形界面獲得預期結果。無論如何,我可以使用VQL。欣賞它! – Shane

+0

太棒了!我很高興它有幫助。 – Kyle

+0

隨着上述問題的延續,以及上述信息(批准日期,提交日期和ID),我還有一個名爲「假期」的專欄。現在,我想查看除假日之外的批准日期和假日日期之間的差異。你能想到在Denodo做一個簡單的方法嗎? – Shane

相關問題