2016-04-26 17 views
-1

私は3つの関連する列:Serial_#,Action_DateおよびIG_Groupのテーブルを持っています。私はSerial_#Action_Dateの2つの列を並べ替え、その結果にSerial_#ごとに1つ以上のエントリを並べ替えるクエリがあります。これは、シリアルが新しいグループに移動された日付を通知します。例グループ内の最後から2番目のレコードを見つける方法最後に見つけ出す

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 

私は、それが今ではだ1にあった前であった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_#; 
関連する問題