2016-04-26 61 views
-1

我有一個包含3個相關列的表:Serial_#,Action_DateIG_Group。我有一個查詢按這些列中的2個排序 - Serial_#Action_Date,以便結果每個Serial_#有1個或多個條目。這告訴我一個序列被移到一個新組的日期。例如如何查找組中的倒數第二個記錄其他找到最後的

Serial_#  Action_Date  IG_Group 
4000001  2016-04-08  Group J 
4000001  2016-04-07  Group F 
4000001  2016-03-14  Group B 
5000002  2016-04-19  Group J 
6000003  2016-04-08  Group J 
6000003  2015-10-19  Group A 

我試圖找出IG_Group串行是它是在一個它在現在之前。而如果只有一個條目(如上面的串行5000002),那麼我想該條目

+0

用你正在使用的數據庫標記你的問題。 –

回答

1

您可以用窗口函數每一條記錄(其中大部分數據庫支持)這樣做:

select t.*, 
     coalesce(lag(ig_group) over (partition by serial_ order by action_date), 
from t; 

對於剛剛過去的一個,你可以使用條件聚合:

select t.serial_# 
     max(case when seqnum = 1 then ig_group end) as last_ig_group, 
     coalesce(max(case when seqnum = 2 then ig_group end), 
       max(case when seqnum = 1 then ig_group end) 
       ) as prev_ig_group_if_any 
from (select t.*, 
      row_number() over (partition by serial_ order by action_date desc) as seqnum 
     from t 
    ) t 
group by t.serial_#;