求助:用sql筛选出多个不同个人连续3天(及以上)发生交易的情形

hoolore 2016-07-19 07:33:20
'20150115',090104',1405042914050429',李四',50000',现金',贷'
'20150117',090105',1405042914050429',李四',3400',现金',贷'
'20150118',090106',1405042914050429',李四',600',现金',贷'
'20150119',090107',1405042914050429',李四',890',现金',贷'
'20150119',090108',1405042914050429',李四',860',转账',贷'
'20150120',090109',1405042914050429',李四',8000',现金',贷'
'20150123',090112',1405042914050429',李四',7800',现金',借'
'20150108',090100',1405042514050425',王五',20550',转账',贷'
'20150108',090100',1405042514050425',王五',20550',转账',借'
'20150109',090101',1405042514050425',王五',24188',现金',贷'
'20150108',090100',1405042714050427',张三',20550',现金',贷'
'20150108',090100',1405042714050427',张三',20550',现金',借'
'20150109',090101',1405042714050427',张三',24188',现金',贷'
'20150109',090112',1405042714050427',张三',6500',现金',借'
'20150110',090102',1405042714050427',张三',5000',现金',贷'
'20150110',090112',1405042714050427',张三',7800',现金',借'
'20150112',090112',1405042714050427',张三',4500',现金',借'
'20150113',090103',1405042714050427',张三',2000',现金',贷'
'20150115',090104',1405042714050427',张三',50000',现金',贷'

要求:筛出所有主体连续3天(及以上)发生现金存入的交易(贷方)
目标值如下图:

非常感谢!
...全文
964 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2016-07-21
  • 打赏
  • 举报
回复

with t as(select distinct 日期,账号 from #t where 交易方式='现金' and 借贷标识='贷'),
     u as(select rn=datediff(d,'19700101',日期)-dense_rank() over(partition by 账号 order by 日期),日期,账号 from t),
     v as(select a.账号,a.日期
           from u a
           inner join (select 账号,rn from u group by 账号,rn having count(1)>=3) b on a.账号=b.账号 and a.rn=b.rn)
select a.日期,a.时间,a.账号,a.户名,a.金额,a.交易方式,a.借贷标识
 from #t a
 inner join v b on a.账号=b.账号 and a.日期=b.日期
 where a.交易方式='现金' and a.借贷标识='贷'
hoolore 2016-07-21
  • 打赏
  • 举报
回复
谢版主大力支持!不过逻辑可能不对,如果某人某天2笔、第2天1笔,不符合连续3天要求,但仍然会被筛选出来。如张三仅存在蓝底色交易呢?
另外,我在允许大型数据时发现不同客户的rn可能会一致,按照该逻辑筛选出来,无法得出预期结果。最后用客户名称、rn同时比对,才离目标近点(未解决问题:会出现一天发生3笔以上,或某天2笔、次日1笔等情况)。
唐诗三百首 2016-07-20
  • 打赏
  • 举报
回复

with t as(
select *,rn=datediff(d,'19700101',日期)-row_number() over(partition by 账号 order by 日期)
from #t
where 交易方式='现金' and 借贷标识='贷')
select 日期,时间,账号,户名,金额,交易方式,借贷标识
from t
where rn in(select rn from t group by rn having count(1)>=3)

/*
日期 时间 账号 户名 金额 交易方式 借贷标识
---------- ---------- ---------- ---------- ----------- ---------- ----------
20150108 090100 14050427 张三 20550 现金 贷
20150109 090101 14050427 张三 24188 现金 贷
20150110 090102 14050427 张三 5000 现金 贷
20150117 090105 14050429 李四 3400 现金 贷
20150118 090106 14050429 李四 600 现金 贷
20150119 090107 14050429 李四 890 现金 贷
20150120 090109 14050429 李四 8000 现金 贷

(7 row(s) affected)
*/
唐诗三百首 2016-07-20
  • 打赏
  • 举报
回复

with t as(
select *,rn=datediff(d,'19700101',日期)-dense_rank() over(partition by 账号 order by 日期)
 from #t
 where 交易方式='现金' and 借贷标识='贷')
select 日期,时间,账号,户名,金额,交易方式,借贷标识
 from t 
 where rn in(select rn from t group by rn having count(1)>=3)

/*
日期         时间         账号         户名         金额          交易方式       借贷标识
---------- ---------- ---------- ---------- ----------- ---------- ----------
20150108   090100     14050427   张三         20550       现金         贷
20150108   090600     14050427   张三         56000       现金         贷
20150108   090600     14050427   张三         66000       现金         贷
20150109   090101     14050427   张三         24188       现金         贷
20150110   090102     14050427   张三         5000        现金         贷
20150117   090105     14050429   李四         3400        现金         贷
20150117   090123     14050429   李四         5400        现金         贷
20150118   090125     14050429   李四         5000        现金         贷
20150118   090106     14050429   李四         600         现金         贷
20150119   090107     14050429   李四         890         现金         贷
20150120   090109     14050429   李四         8000        现金         贷

(11 row(s) affected)
*/
hoolore 2016-07-20
  • 打赏
  • 举报
回复
似乎只是适用单日只有1笔的交易,如果再增加4行数据,也即某人某日发生多笔现金存入交易呢?再次谢谢!
'20150115','090104','14050429','李四','50000','现金','贷'
'20150117','090105','14050429','李四','3400','现金','贷'
'20150118','090106','14050429','李四','600','现金','贷'
'20150119','090107','14050429','李四','890','现金','贷'
'20150119','090108','14050429','李四','860','转账','贷'
'20150120','090109','14050429','李四','8000','现金','贷'
'20150123','090112','14050429','李四','7800','现金','借'
'20150108','090100','14050425','王五','20550','转账','贷'
'20150108','090100','14050425','王五','20550','转账','借'
'20150109','090101','14050425','王五','24188','现金','贷'
'20150108','090100','14050427','张三','20550','现金','贷'
'20150108','090100','14050427','张三','20550','现金','借'
'20150109','090101','14050427','张三','24188','现金','贷'
'20150109','090112','14050427','张三','6500','现金','借'
'20150110','090102','14050427','张三','5000','现金','贷'
'20150110','090112','14050427','张三','7800','现金','借'
'20150112','090112','14050427','张三','4500','现金','借'
'20150113','090103','14050427','张三','2000','现金','贷'
'20150115','090104','14050427','张三','50000','现金','贷'
'20150108','090600','14050427','张三','56000','现金','贷'
'20150108','090600','14050427','张三','66000','现金','贷'
'20150117','090123','14050429','李四','5400','现金','贷'
'20150118','090125','14050429','李四','5000','现金','贷'
(最下面4行为新增数据)
目标值:

hoolore 2016-07-19
  • 打赏
  • 举报
回复
先前单个主体连续多天交易的筛选,已由版主予以解决,谢谢。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧