mysql5资源共享

 找回密码
 立即注册
查看: 62|回复: 4

[MS-SQL Server] 【应用】如何判断客户是否短时间内频繁交易,查询5分钟内交易次数≥3次的交易记录

[复制链接]

2

主题

5

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-7-18 11:43:27 | 显示全部楼层 |阅读模式
求助求助,这个问题已经捣鼓了两天了,各种百度还是没有解决心中的疑问。求大神相助。

一张记录所有用户交易日期、时间、id的表格,想要查询5分钟内交易次数≥3次的交易记录,sql语言如何写呢?


6940.png

6940.png



date        time        ID
2019/6/30        104739        A00001
2019/6/30        104740        A00001
2019/6/30        104744        A00001
2019/6/30        104745        A00001
2019/6/30        190727        A00002
2019/6/30        213819        A00003
2019/6/30        213830        A00004
2019/7/1        215106        A00007
2019/7/1        215109        A00009
2019/7/1        215109        A00005
2019/7/1        215109        A00010
回复

使用道具 举报

36

主题

2968

帖子

6024

积分

论坛元老

Rank: 8Rank: 8

积分
6024
发表于 2019-7-18 12:26:23 | 显示全部楼层
  1. DECLARE@tTABLE(DDATENOTNULL,TINTNOTNULL,IDVARCHAR(10)NOTNULL);
  2. INSERT@t(D,T,ID)
  3. VALUES('2019/6/30',104739,'A00001'),('2019/6/30',104740,'A00001'),('2019/6/30',104744,'A00001'),
  4. ('2019/6/30',104745,'A00001'),('2019/6/30',190727,'A00002'),('2019/6/30',213819,'A00003'),
  5. ('2019/6/30',213830,'A00004'),('2019/7/1',215106,'A00007'),('2019/7/1',215109,'A00009'),
  6. ('2019/7/1',215109,'A00005'),('2019/7/1',215109,'A00010');
  7. WITHDAS(SELECT*,T/10000*3600+T/100*60+T%60SFROM@t),
  8. D1AS(SELECT*,
  9. LEAD(ID,2)OVER(ORDERBYD.ID,D.D,D.T)LeadID,
  10. LEAD(S,2)OVER(ORDERBYD.ID,D.D,D.T)LeadS,
  11. LAG(ID,2)OVER(ORDERBYD.ID,D.D,D.T)LagID,
  12. LAG(S,2)OVER(ORDERBYD.ID,D.D,D.T)LagS
  13. FROMD)
  14. SELECTD1.D,D1.T,D1.ID
  15. FROMD1
  16. WHERE(D1.LeadID=D1.IDANDD1.LeadS-D1.S<=300)
  17. OR(D1.LagID=D1.IDANDD1.S-D1.LagS<=300);
复制代码
(11行受影响) DTID ------------------------------- 2019-06-30104739A00001 2019-06-30104740A00001 2019-06-30104744A00001 2019-06-30104745A00001 (4行受影响)
回复

使用道具 举报

2

主题

5

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2019-7-18 12:30:58 | 显示全部楼层
lead和lag这两个函数,楼主先了解一下。
回复

使用道具 举报

2

主题

5

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2019-7-18 14:33:17 | 显示全部楼层
引用1楼HelloWorld,的回复:
  1. DECLARE@tTABLE(DDATENOTNULL,TINTNOTNULL,IDVARCHAR(10)NOTNULL);
  2. INSERT@t(D,T,ID)
  3. VALUES('2019/6/30',104739,'A00001'),('2019/6/30',104740,'A00001'),('2019/6/30',104744,'A00001'),
  4. ('2019/6/30',104745,'A00001'),('2019/6/30',190727,'A00002'),('2019/6/30',213819,'A00003'),
  5. ('2019/6/30',213830,'A00004'),('2019/7/1',215106,'A00007'),('2019/7/1',215109,'A00009'),
  6. ('2019/7/1',215109,'A00005'),('2019/7/1',215109,'A00010');
  7. WITHDAS(SELECT*,T/10000*3600+T/100*60+T%60SFROM@t),
  8. D1AS(SELECT*,
  9. LEAD(ID,2)OVER(ORDERBYD.ID,D.D,D.T)LeadID,
  10. LEAD(S,2)OVER(ORDERBYD.ID,D.D,D.T)LeadS,
  11. LAG(ID,2)OVER(ORDERBYD.ID,D.D,D.T)LagID,
  12. LAG(S,2)OVER(ORDERBYD.ID,D.D,D.T)LagS
  13. FROMD)
  14. SELECTD1.D,D1.T,D1.ID
  15. FROMD1
  16. WHERE(D1.LeadID=D1.IDANDD1.LeadS-D1.S<=300)
  17. OR(D1.LagID=D1.IDANDD1.S-D1.LagS<=300);
复制代码
(11行受影响) DTID ------------------------------- 2019-06-30104739A00001 2019-06-30104740A00001 2019-06-30104744A00001 2019-06-30104745A00001 (4行受影响) 谢谢大神,已经成功了,感动
回复

使用道具 举报

2

主题

5

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2019-7-18 14:34:02 | 显示全部楼层
引用2楼卖水果的net的回复:lead和lag这两个函数,楼主先了解一下。
好,2楼大神用了这两个函数,我消化理解下。谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-12-7 02:13 , Processed in 0.052041 second(s), 21 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表