如下的t表就是你目前的SQL语句, 自己替换即可
代码如下:
SQL> select * from t;
ID HM CDSC_ID CDSC_NAME CDSC_EFF_DT
---------- ----- ---------- --------- -----------
1 1-11Q 72364 T-2-3 2012/12/25
1 1-11Q 72364 T-2-3-加 2012/12/24
2 1-117 76161 T-1-1 2012/12/24
2 1-117 76161 T-1-1-副 2012/12/24
3 1-1RE 761916 Q-3-5 2012/12/24
4 1-11P 719113 D-4-5 2012/12/24
5 1-1OA 761916 V-6-5 2012/12/14
7 rows selected
SQL> -- 1、选择条件为cdsc_eff_dt距离现在时间近的一条记录(可以忽略之前的记录内容);
SQL>
SQL> select id,
2 hm,
3 cdsc_id,
4 cdsc_name,
5 cdsc_eff_dt
6 from
7 (select id,
8 hm,
9 cdsc_id,
10 cdsc_name,
11 cdsc_eff_dt,
12 row_number() over(partition by id order by cdsc_eff_dt desc) rn
13 from t)
14 where rn = 1;
ID HM CDSC_ID CDSC_NAME CDSC_EFF_DT
---------- ----- ---------- --------- -----------
1 1-11Q 72364 T-2-3 2012/12/25
2 1-117 76161 T-1-1 2012/12/24
3 1-1RE 761916 Q-3-5 2012/12/24
4 1-11P 719113 D-4-5 2012/12/24
5 1-1OA 761916 V-6-5 2012/12/14
SQL>
SQL> --2、选择条件为cdsc_name中带有"加"或者“副”的记录(可以忽略后面的时间);
SQL>
SQL>
SQL> select id,
2 hm,
3 cdsc_id,
4 cdsc_name,
5 cdsc_eff_dt
6 from
7 (select id,
8 hm,
9 cdsc_id,
10 cdsc_name,
11 cdsc_eff_dt,
12 row_number() over(partition by id order by case when instr(cdsc_name, '加') > 0 or instr(cdsc_name, '副') > 0 then 1 else 0 end desc) rn,
13 count(*) over(partition by id) cnt
14 from t)
15 where cnt = 1 or rn = 1;
ID HM CDSC_ID CDSC_NAME CDSC_EFF_DT
---------- ----- ---------- --------- -----------
1 1-11Q 72364 T-2-3-加 2012/12/24
2 1-117 76161 T-1-1-副 2012/12/24
3 1-1RE 761916 Q-3-5 2012/12/24
4 1-11P 719113 D-4-5 2012/12/24
5 1-1OA 761916 V-6-5 2012/12/14
SQL>