|
如果按照置顶帖提问的智慧来发帖,问题早解决了。
with t as
(
select '142000394' AGENT_CODE, '0119' RANK,to_date('2017/3/1', 'yyyy/mm/dd') START_DATE, null END_DATE from dual
union all
select '142000394' AGENT_CODE, '0119' RANK,to_date('2017/1/1', 'yyyy/mm/dd') START_DATE, to_date('2017/2/28 23:59:59', 'yyyy/mm/dd hh24:mi:ss') END_DATE from dual
union all
select '142000394' AGENT_CODE, '0122' RANK,to_date('2016/10/1', 'yyyy/mm/dd') START_DATE, to_date('2016/12/31 23:59:59', 'yyyy/mm/dd hh24:mi:ss') END_DATE from dual
union all
select '142000394' AGENT_CODE, '0122' RANK,to_date('2016/5/31', 'yyyy/mm/dd') START_DATE, to_date('2016/9/30 23:59:59', 'yyyy/mm/dd hh24:mi:ss') END_DATE from dual
union all
select '142000394' AGENT_CODE, '0119' RANK,to_date('2016/5/26', 'yyyy/mm/dd') START_DATE, to_date('2016/5/30 23:59:59', 'yyyy/mm/dd hh24:mi:ss') END_DATE from dual
)
SELECT * FROM (
SELECT t2.*
,ROW_NUMBER() OVER(PARTITION BY AGENT_CODE ORDER BY START_DATE) rn
FROM (SELECT T.*
,ROW_NUMBER() OVER(PARTITION BY AGENT_CODE, RANK ORDER BY START_DATE DESC) RN1
,ROW_NUMBER() OVER(PARTITION BY AGENT_CODE ORDER BY START_DATE DESC) RN2
FROM T
) t2
WHERE RN1=RN2
)
WHERE rn=1
|
|