2017-03-03 17 views
0
select t3.tn, t1.parent_trans_id 
    from T1 
    INNER JOIN 
    T2 
    ON T1.SL_ORDER_ID = t2.sl_order_id 
    inner join 
    t3 
    on t2.subscriber_line_id = t3.subscriber_line_id 
    where 

t3.TN in ('9727740700', '9897860312') 

これは私が、私はいくつかのsub_queriesを試みたが、うまくいきませんでしたparent_trans_idの唯一の最後の2の最大を選択する必要があり、私はデータ選択し、最後の2最大

TN    parent_trans_id 
9897860312  166974063 
9897860312  168516881 
9897860312  168486626 
9727740700  172254571 
9727740700  173345705 
9727740700  173345235 

の下に持って来るために使用していますクエリです。 以下は私が必要とするデータセットです。

TN   parent_trans_id 
9897860312  168516881 
9897860312  168486626 
9727740700  173345705 
9727740700  173345235 

答えて

3

解析関数row_numberを使用して、各グループ内の行番号を割り当て、各tnの上位2行を取得することができます。

select * 
from (
    select t3.tn, 
     t1.parent_trans_id, 
     row_number() over (
      partition by t3.tn order by t1.parent_trans_id desc nulls last 
      ) rn 
    from T1 
    inner join T2 on T1.SL_ORDER_ID = t2.sl_order_id 
    inner join t3 on t2.subscriber_line_id = t3.subscriber_line_id 
    where t3.TN in ('9727740700', '9897860312') 
    ) 
where rn <= 2; 
+0

それは働いた。ありがとうございました –

1

あなたはrow_number()を使用してこの操作を行うことができます。

with t as (
     <your query here> 
    ) 
select t.* 
from (select t.*, row_number() over (partition by tn order by ?? desc) as seqnum 
     from t 
    ) t 
where seqnum <= 2; 

??が何であるかを "最後" を指定した列のです。