速度快点的方式:临时表+cursor
DROP TABLE TEMP_LEAVERDS;
CREATE GLOBAL TEMPORARY TABLE TEMP_LEAVERDS ON COMMIT PRESERVE ROWS AS
(select LC.id,LC.dt
from LeaveCountry LC,
(select id,count(*)
from LeaveCountry
where dt<sysdate and dt>sysdate-730
group by id
having count(*)>=4) LI
where LC.id=LI.id
);
SET SERVEROUTPUT ON
DECLARE
v_id TEMP_LEAVERDS.ID%TYPE;
v_dt TEMP_LEAVERDS.DT%TYPE;
cursor CUR_LEAVEID is select id,dt from TEMP_LEAVERDS;
cursor CUR_MINDATE is select id,min(dt) dt from TEMP_LEAVERDS group by id;
BEGIN
open CUR_LEAVEID;
loop
fetch CUR_LEAVEID into v_id,v_dt;
exit when CUR_LEAVEID%NOTFOUND;
delete from TEMP_LEAVERDS where id=(select distinct id from TEMP_LEAVERDS where id=v_id and dt<>v_dt and abs(dt-v_dt)<30);
commit;
end loop;
close CUR_LEAVEID;
open CUR_MINDATE;
loop
fetch CUR_MINDATE into v_id,v_dt;
exit when CUR_MINDATE%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('ID: '||to_char(v_id)||', DATE: '||to_char(v_dt,'yyyy-mm-dd'));
end loop;
close CUR_MINDATE;
END;