2016-03-24 53 views
0

我有一個工作流表,我想返回所有工作流信息的結果。同時,我還想創建其他列以將應用程序類型和工作流程的最後日期分類爲應用程序關閉日期。SQL工作流最大日期

例如:

table name: Approval_Workflow 

Key ID Status   Comment  timestamp 
001 e1f submit   none   01/05/2016   
001 f64 in process  Review  01/06/2016 
001 2l5 return to user missing info 01/08/2016 
001 8n8 resubmit  none   01/10/2016 
001 gr0 approve  none   01/10/2016 
001 b3u activated  none   01/15/2016 
002 nb9 submit   none   01/08/2016 
002 us1 in progress Review  01/08/2016 
002 cs6 approve  none   01/08/2016 
002 yt2 activated  none   01/10/2016 

我想獲得額外的數據列的結果顯示

Key ID Status   Comment  timestamp type  closedate 
001 e1f submit   none   01/05/2016 bad appl 01/15/2016  
001 f64 in process  Review  01/06/2016 bad appl 01/15/2016 
001 2l5 return to user missing info 01/08/2016 bad appl 01/15/2016 
001 8n8 resubmit  none   01/10/2016 bad appl 01/15/2016 
001 gr0 approve  none   01/10/2016 bad appl 01/15/2016 
001 b3u activated  none   01/15/2016 bad appl 01/15/2016 
002 nb9 submit   none   01/08/2016 good appl 01/10/2016 
002 us1 in progress Review  01/08/2016 good appl 01/10/2016 
002 cs6 approve  none   01/08/2016 good appl 01/10/2016 
002 yt2 activated  none   01/10/2016 good appl 01/10/2016 

我聯繫表本身併成功分類程序的類型。但是,當我嘗試使用MAX()函數獲取工作流的最大日期時,我不斷得到每個工作流日期的相同日期。 我也嘗試獲取日期的狀態在「激活」作爲closedate,但沒有成功。

非常感謝您的幫助。

+0

類型從哪裏來? – xQbert

+0

你在使用什麼數據庫?什麼是「類型」列的邏輯? –

回答

1

您可以使用ANSI標準的窗口功能。假設一個「退回到用戶」代表一個不好的應用程序:

select awf.*, 
     (case when sum(case when status = 'return to user' then 1 else 0 end) over (partition by key) > 0 
      then 'bad appl' 
      else 'good appl' 
     end) as type, 
     max(timestamp) over (partition by key) as closeddate 
from Approval_Workflow awf; 

注意keytypetimestamp在許多數據庫的關鍵字,所以他們不是列的最佳名稱。

+0

謝謝!!!!所以結束(分區......)就是這樣做的。非常非常感謝你! – Tuatara