SELECT INFO_ID, DEVICE_ID, PH_NUM, PH_MAX, RECORD_TIME, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME, REMARK FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY DEVICE_ID,PH_NUM ORDER BY RECORD_TIME DESC) AS RN FROM TWIN_PAN_HEAD_INFO) T WHERE RN = 1 ORDER BY RECORD_TIME DESC insert into twin_pan_head_info DEVICE_ID, PH_NUM, PH_MAX, RECORD_TIME, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME, REMARK, #{deviceId}, #{phNum}, #{phMax}, #{recordTime}, #{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}, #{remark}, update twin_pan_head_info DEVICE_ID = #{deviceId}, PH_NUM = #{phNum}, PH_MAX = #{phMax}, RECORD_TIME = #{recordTime}, CREATED_BY = #{createdBy}, CREATED_TIME = #{createdTime}, UPDATED_BY = #{updatedBy}, UPDATED_TIME = #{updatedTime}, REMARK = #{remark}, where INFO_ID = #{infoId} delete from twin_pan_head_info where INFO_ID = #{infoId} delete from twin_pan_head_info where INFO_ID in #{infoId}