merge into ${rangeTableName} a
using (
select a.pk_member, max(a.new_level) pk_grade
from cu_member_grade a
inner join(
select pk_member, max(nvl(modified_time, creation_time)) creation_time
from cu_member_grade
where period = #{period}
and del_flag = 0
and up_type = 2
group by pk_member) b
on a.pk_member = b.pk_member and nvl(a.modified_time, a.creation_time) = b.creation_time
group by a.pk_member
) b
on (a.pk_member = b.pk_member)
when matched then
update set
a.pk_grade = b.pk_grade
merge into ${secondRangeTableName} a
using (
select cs.pk_member, b.pk_grade
from ${secondRangeTableName} cs
inner join(
select a.pk_member, max(a.new_level) pk_grade
from cu_member_grade a
inner join(
select pk_member, max(nvl(modified_time, creation_time)) creation_time
from cu_member_grade
where period <= #{period}
and del_flag = 0
and up_type = 2
group by pk_member) b
on a.pk_member = b.pk_member and nvl(a.modified_time, a.creation_time) = b.creation_time
group by a.pk_member) b
on cs.pk_member = b.pk_member
where cs.pk_grade < b.pk_grade
) b
on (a.pk_member = b.pk_member)
when matched then
update set
a.pk_grade = b.pk_grade
merge into ${rangeTableName} a
using (
select pk_member, max(new_level) pk_grade
from cu_member_level
where del_flag = 0 and up_type = 4
and pk_order = #{pkOrder}
group by pk_member
) b
on (a.pk_member = b.pk_member)
when matched then
update set
a.pk_grade = b.pk_grade
update cu_member_grade
set del_flag = 1,
modified_time = sysdate
where period = #{period}
and del_flag = 0
and up_type = 1
update cu_member_grade
set del_flag = 1,
modified_time = sysdate
where period = #{period}
and del_flag = 0
and up_type = 1
and pk_id in
#{item.pkId}