<select id="getProposalMainList" parameterType="java.util.Map" resultMap="BaseResultMap">
SELECT main_id, user_id, proposal_name, total_amount, total_fee, create_time, modify_time,
create_by, modify_by, state, pdf_url, is_delete, holder_age, holder_sex, holder_social_security,
holder_job_detail, holder_name, holder_job_code, holder_job_cate
From(
SELECT main_id, user_id, proposal_name, total_amount, total_fee, create_time, modify_time,
create_by, modify_by, state, pdf_url, is_delete, holder_age, holder_sex, holder_social_security,
holder_job_detail, holder_name, holder_job_code, holder_job_cate, row_number() over( ORDER BY
create_time DESC ) therow
FROM (
SELECT ipm.main_id, ipm.user_id, ipm.proposal_name, ipm.total_amount, ipm.total_fee,
ipm.create_time, ipm.modify_time, ipm.create_by, ipm.modify_by, ipm.state, ipm.pdf_url,
ipm.is_delete,ipm.holder_age,ipm.holder_sex,ipm.holder_social_security,ipm.holder_job_detail,
ipm.holder_name,ipm.holder_job_code,ipm.holder_job_cate,row_number() over( PARTITION BY ipm.main_id ORDER BY
ipm.create_time DESC ) RN
FROM
ipc_proposal_main ipm,IPC_PROPOSAL_MAIN_INFO ipmi , ipc_proposal_risks ipr, lmrisk lmr
Where ipm.is_delete = 0
<if test="state != null">
AND ipm.state = #{state}
</if>
<if test="condition != null">
AND (
ipm.holder_name like concat('%',concat(#{condition},'%'))
or (ipmi.insured_name like concat('%',concat(#{condition},'%')) and ipm.main_id = ipmi.main_id and ipmi.is_delete = 0)
or (lmr.riskname like concat('%',concat(#{condition},'%')) and ipm.main_id = ipmi.main_id and ipr.pro_id = ipmi.pro_id and ipr.product_code = lmr.riskcode
and ipr.is_delete = 0 and ipmi.is_delete = 0 )
)
</if>
) result1
where result1.rn = 1
) result2 where result2.therow between #{startRow} and #{endRow}
</select>
哈哈哈简直是魔鬼吧,不要太耗时
<select id="getProposalMainList" parameterType="java.util.Map" resultMap="BaseResultMap">
SELECT main_id, user_id, proposal_name, total_amount, total_fee, create_time, modify_time,
create_by, modify_by, state, pdf_url, is_delete, holder_age, holder_sex, holder_social_security,
holder_job_detail, holder_name, holder_job_code, holder_job_cate
From(
SELECT main_id, user_id, proposal_name, total_amount, total_fee, create_time, modify_time,
create_by, modify_by, state, pdf_url, is_delete, holder_age, holder_sex, holder_social_security,
holder_job_detail, holder_name, holder_job_code, holder_job_cate, row_number() over( ORDER BY
create_time DESC ) therow
FROM (
SELECT ipm.main_id, ipm.user_id, ipm.proposal_name, ipm.total_amount, ipm.total_fee,
ipm.create_time, ipm.modify_time, ipm.create_by, ipm.modify_by, ipm.state, ipm.pdf_url,
ipm.is_delete,ipm.holder_age,ipm.holder_sex,ipm.holder_social_security,ipm.holder_job_detail,
ipm.holder_name,ipm.holder_job_code,ipm.holder_job_cate
FROM
ipc_proposal_main ipm
Where ipm.is_delete = 0
<if test="state != null">
AND ipm.state = #{state}
</if>
<if test="condition != null and condition != ''">
AND exists
(
select ipmi.main_id from IPC_PROPOSAL_MAIN_INFO ipmi
where ipm.main_id = ipmi.main_id and ipmi.is_delete = 0
AND ipmi.insured_name like '%'||#{condition}||'%'
UNION ALL
SELECT ipm1.main_id FROM ipc_proposal_main ipm1 where ipm1.holder_name like
'%'||#{condition}||'%' AND ipm1.state = 0 AND ipm1.is_delete = 0 AND ipm.main_id= ipm1.main_id
UNION ALL
select ipmi1.main_id from lmrisk lmr inner join ipc_proposal_risks ipr on ipr.product_code = lmr.riskcode
INNER join IPC_PROPOSAL_MAIN_INFO ipmi1 on ipr.pro_id = ipmi1.pro_id
where lmr.riskname like
'%'||#{condition}||'%' AND ipr.is_delete = 0 and ipmi1.is_delete = 0 AND ipm.main_id = ipmi1.main_id
)
</if>
)
) result where result.therow between #{startRow} and #{endRow}
</select>