我會嘗試透視數據。下面是一個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
唯一的缺點是,如果狀態代碼列表是非常大的或不能很好地控制,那麼這種解決方案是不夠靈活,但是你的例子似乎表明這不會是一個問題。
謝謝,凱爾。我正在嘗試上面提到的Denodo鏈接,但它無法通過圖形界面獲得預期結果。無論如何,我可以使用VQL。欣賞它! – Shane
太棒了!我很高興它有幫助。 – Kyle
隨着上述問題的延續,以及上述信息(批准日期,提交日期和ID),我還有一個名爲「假期」的專欄。現在,我想查看除假日之外的批准日期和假日日期之間的差異。你能想到在Denodo做一個簡單的方法嗎? – Shane