从同一部电话中选择最后 2 个最大值
selecting last 2 max from same telephone
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
我只需要 select 最后 2 个 parent_trans_id 我尝试了一些 sub_queries 但没有用。
下面是我需要的数据集。
TN parent_trans_id
9897860312 168516881
9897860312 168486626
9727740700 173345705
9727740700 173345235
您可以使用分析函数 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;
您可以使用 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;
??
用于指定 "last" 是什么的列。
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
我只需要 select 最后 2 个 parent_trans_id 我尝试了一些 sub_queries 但没有用。 下面是我需要的数据集。
TN parent_trans_id
9897860312 168516881
9897860312 168486626
9727740700 173345705
9727740700 173345235
您可以使用分析函数 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;
您可以使用 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;
??
用于指定 "last" 是什么的列。