表结构
会员编号 交易日期 是否汇款
MemberID DealDate IsRemit写一个SQL找出逾期未汇款的会员。
逾期未汇款定义:
1.根据系统当前日期,大于1个月已交易但没汇款的会员;
2.同一个会员连续两次且其中一次交易超过15天的会员,两次交易至少间隔一天,同一天内的两次交易视为一次交易;
会员编号 交易日期 是否汇款
MemberID DealDate IsRemit写一个SQL找出逾期未汇款的会员。
逾期未汇款定义:
1.根据系统当前日期,大于1个月已交易但没汇款的会员;
2.同一个会员连续两次且其中一次交易超过15天的会员,两次交易至少间隔一天,同一天内的两次交易视为一次交易;
解决方案 »
- sqlplus 和 oracle工具如何处理set xxx这种语句
- 存储过程
- 请教ORA-01157: 无法标识/锁定数据文件 13 - 请参阅 DBWR 跟踪文件
- blob字段显示问题
- oracle触发器中如何获取系统用户名?
- 解决问题者散分
- oracle报价多少?
- 请教以下:网上有没有什么容易一点的oracle教程看?书店里面的oracle好书太少了:(
- oracle 随机函数出错?
- 请问在ORACLE上怎么比较日期的????用标准SQL能不能实现???急!!!谢(将送分)
- 表之间数据同步问题
- 在ORACLE 中用SELECT rowid form tabname,取得的ROWID ,如:AAADdeAAIAAABmPAAA,是不是经过BASE-64编码后的结果?另:是不是标准的BASE-64编
select * from test where sysdate-DealDate>30 and isremit='1'
第二条不知道什么意思 看不太明白
SQL> select * from test; ID DEALDATE I
---------- ---------- -
1 2006-03-02 1
1 2006-09-18 0
2 2006-09-18 0
2 2006-09-19 0
3 2006-09-30 0
3 2006-09-30 0
4 2006-10-01 0
5 2006-09-01 0已选择8行。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 0SQL>
---------- ------------------- --
1 2006-03-02 00:00:00 1
1 2006-09-18 00:00:00 0
2 2006-09-18 00:00:00 0
2 2006-09-22 00:00:00 0
3 2006-09-27 00:00:00 0
3 2006-09-27 00:00:00 0
4 2006-10-01 00:00:00 0
5 2006-09-01 00:00:00 0
1 2006-08-30 00:00:00 0
3 2006-09-27 00:00:00 1
3 2006-09-03 00:00:00 0
6 2006-09-25 00:00:00 0已选择12行。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 ;MEMBERID DEALDATE
---------- -------------------
1 2006-08-30 00:00:00
1 2006-09-18 00:00:00
2 2006-09-18 00:00:00
2 2006-09-22 00:00:00
3 2006-09-03 00:00:00
3 2006-09-27 00:00:00
5 2006-09-01 00:00:00已选择7行。偷懒一下,*_*
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 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;