2017-03-03 46 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') 

這是我使用帶來以下數據來自同一個電話選擇最後2最大

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

,我需要選擇只剩下最後2最大parent_trans_id的我嘗試了一些sub_queries但沒有奏效查詢。 下面是我需要的數據集。

TN   parent_trans_id 
9897860312  168516881 
9897860312  168486626 
9727740700  173345705 
9727740700  173345235 

回答

3

您可以使用分析功能row_number分配各組內的行號,並獲得高層的兩行對每個TN。

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; 

??是針對指定了 「最後」 是一列。

相關問題