根据另一个列中的值获取列的第一/第二次出现-Oracle

时间:2019-05-07 04:32:00

标签: oracle dense-rank

我想在两种情况下获得DESC_TXT

STEP_NAM = GCP时-我想要第二次出现的DESC_TXT,即TR/VR/NF(第三行)

STEP_NAM = CA时-我希望第一次出现DESC_TXT,即QS/SC/S(第四行)

TR_NUM RN_REF_CD DESC_TXT TRN_DTTM STEP_NAM 22938243 20180106-0220 null 1/6/2018 19:35 CF 22954518 20180106-0220 IT/SI/WS 1/8/2018 18:32 GCP 22957994 20180106-0220 TR/VR/NF 1/9/2018 10:05 GCP 22958126 20180106-0220 QS/SC/S 1/9/2018 10:08 CA 22958125 20180106-0220 QS/SC/S 1/9/2018 10:08 CA 22958135 20180106-0220 QS/SC/S 1/9/2018 10:08 GCP 22958136 20180106-0220 QS/SC/S 1/9/2018 10:08 GCP 22958140 20180106-0220 QS/SC/S 1/9/2018 10:08 SBP 22959829 20180106-0220 QS/SC/S 1/9/2018 11:14 SBP 22959827 20180106-0220 QS/SC/S 1/9/2018 11:14 SBP 22959828 20180106-0220 QS/SC/S 1/9/2018 11:14 SBP 22959830 20180106-0220 QS/SC/S 1/9/2018 11:14 SBP 22959873 20180106-0220 QS/SC/S 1/9/2018 11:15 OIP 22959936 20180106-0220 QS/SC/S 1/9/2018 11:17 SBP 22959945 20180106-0220 QS/SC/S 1/9/2018 11:17 OIP 22959956 20180106-0220 QS/SC/S 1/9/2018 11:18 SBP 22959955 20180106-0220 QS/SC/S 1/9/2018 11:18 SBP 22959953 20180106-0220 QS/SC/S 1/9/2018 11:18 SBP 22959954 20180106-0220 QS/SC/S 1/9/2018 11:18 SBP 22960468 20180106-0220 null 1/9/2018 11:39 ERA 22964031 20180106-0220 null 1/9/2018 14:59 SBP 22964032 20180106-0220 null 1/9/2018 14:59 SBP 22964033 20180106-0220 null 1/9/2018 14:59 SBP 22964029 20180106-0220 null 1/9/2018 14:59 OSI 22964030 20180106-0220 null 1/9/2018 14:59 SBP

数据集由〜TRN_DTTM排序

最终输出为-像这样:

RN_REF_CD DESC_TXT1 DESC_TXT2
20180106-0220 TR/VR/NF QS/SC/S

,并希望对每个RN_REF_CD重复此操作。

2 个答案:

答案 0 :(得分:1)

with s (tr_num, rn_ref_cd, desc_txt, trn_dttm, step_nam) as (
select 22938243, '20180106-0220', null      ,   to_date('1/6/2018 19:35', 'mm/dd/yyyy hh24:mi'), 'CF'  from dual union all
select 22954518, '20180106-0220', 'IT/SI/WS',   to_date('1/8/2018 18:32', 'mm/dd/yyyy hh24:mi'), 'GCP' from dual union all
select 22957994, '20180106-0220', 'TR/VR/NF',   to_date('1/9/2018 10:05', 'mm/dd/yyyy hh24:mi'), 'GCP' from dual union all
select 22958126, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 10:08', 'mm/dd/yyyy hh24:mi'), 'CA'  from dual union all
select 22958125, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 10:08', 'mm/dd/yyyy hh24:mi'), 'CA'  from dual union all
select 22958135, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 10:08', 'mm/dd/yyyy hh24:mi'), 'GCP' from dual union all
select 22958136, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 10:08', 'mm/dd/yyyy hh24:mi'), 'GCP' from dual union all
select 22958140, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 10:08', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959829, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:14', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959827, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:14', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959828, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:14', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959830, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:14', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959873, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:15', 'mm/dd/yyyy hh24:mi'), 'OIP' from dual union all
select 22959936, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:17', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959945, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:17', 'mm/dd/yyyy hh24:mi'), 'OIP' from dual union all
select 22959956, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:18', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959955, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:18', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959953, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:18', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22959954, '20180106-0220', 'QS/SC/S' ,   to_date('1/9/2018 11:18', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22960468, '20180106-0220', null      ,   to_date('1/9/2018 11:39', 'mm/dd/yyyy hh24:mi'), 'ERA' from dual union all
select 22964031, '20180106-0220', null      ,   to_date('1/9/2018 14:59', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22964032, '20180106-0220', null      ,   to_date('1/9/2018 14:59', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22964033, '20180106-0220', null      ,   to_date('1/9/2018 14:59', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual union all
select 22964029, '20180106-0220', null      ,   to_date('1/9/2018 14:59', 'mm/dd/yyyy hh24:mi'), 'OSI' from dual union all
select 22964030, '20180106-0220', null      ,   to_date('1/9/2018 14:59', 'mm/dd/yyyy hh24:mi'), 'SBP' from dual)
select rn_ref_cd, 
max(case when rn = 2 and step_nam = 'GCP' then desc_txt end) desc_txt1,
max(case when rn = 1 and step_nam = 'CA'  then desc_txt end) desc_txt2
from
  (select rn_ref_cd, desc_txt, step_nam,
   row_number() over (partition by rn_ref_cd, step_nam order by trn_dttm)  rn
   from s
  )
group by rn_ref_cd;

RN_REF_CD     DESC_TXT DESC_TXT
------------- -------- --------
20180106-0220 TR/VR/NF QS/SC/S 

答案 1 :(得分:0)

**能够通过此查询获取数据,希望对您有所帮助:-**

Hive's size()