to xiaoxiao1984(笨猫儿)
可以这样写吗
SQL> select memberid, dealdate
2 from (
3 select memberid, dealdate
4 from a
5 where isremit = '0'
6 group by memberid, dealdate
7 ) TB
8 where months_between(sysdate,dealdate) >= 1 or
9 trunc(sysdate) - TA.DEALDATE >= 15;
select MemberID,count(*) from A where MemberID in(
select max(MemberID) from A b
where sysdate-b.DealDate>=1
group by MemberID,to_char(DealDate,'yyyymmdd'))
group by MemberID
having count(*)>1
SQL> select id,dealdate,isresult from (
2 select id,dealdate,isresult,count(1)over(partition by id) rid,lag(dealdate)over(partition by id order by dealdate ) lag_date,
3 lead(dealdate)over(partition by id order by dealdate) lead_date from test
4 where isresult='0') a
5 where (a.rid=1 and sysdate-a.dealdate>30) or (sysdate-a.dealdate>15 and a.rid>1 and (a.lag_date<>a.dealdate or a.lead_date<>a.dealdate));
ID DEALDATE I
---------- ---------- -
2 2006-09-18 0
2 2006-09-19 0
5 2006-09-01 0
demo@HASL>select memberid, dealdate
2 from (
3 select memberid, dealdate
4 from a
5 where isremit = '0'
6 group by memberid, dealdate
7 ) TB
8 where months_between(sysdate,dealdate) >= 1
9 or exists (
10 select 1
11 from a TA
12 where TA.memberid = TB.memberid
13 and TA.isremit = '0'
14 and trunc(sysdate) - TA.DEALDATE >= 15
15 )
16 ;