从同一部电话中选择最后2个最大值

时间:2017-03-03 19:57:42

标签: sql oracle greatest-n-per-group

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')

这是我用来带来数据

的查询
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

2 个答案:

答案 0 :(得分:2)

您可以使用分析函数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;

答案 1 :(得分: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;

??用于指定“最后”是什么的列。