norstarcfc
新手上路
- 注册
- 2005-05-13
- 消息
- 77
- 荣誉分数
- 1
- 声望点数
- 18
速度快点的方式:临时表+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;
老兄真是负责到底啊. 不过好象忽视了一个问题. 如果出境四次以上, 比如5次, 6次, 只要有四次记录满足互相之间>30天的要求, 按照题目要求ID就QUALIFY.
如果有人出境5次, 4次满足要求, 但是第5次小于30天. 这个程序就会FILTER OUT这个记录了. 这条鱼就漏网了.