我有一个包含3个相关列的表:Serial_#
,Action_Date
和IG_Group
。我有一个查询按其中的两列 - Serial_#
和Action_Date
排序,以便结果每Serial_#
有一个或多个条目。这告诉我序列被移动到新组的日期。实施例
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_#;