数据库统计同一个人五天重复投诉的数量

image.png我使用lag()over()复制一列排序向下偏移一格做对比,开窗后再group by统计,原先列排序会恢复,统计出来的数量不对。有没有什么其他方法可以做计算,求大神!

问题补充:

image.png

用户jGnXs7014103 发布于 2022-7-29 12:34 (编辑于 2022-7-29 14:02)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
lxy2Lv6中级互助
发布于2022-7-29 15:47

07754969 这个号码一共有五条记录,第一行最早的不计算可以理解,为啥后面四行只取账号是A008和A010的

  • 机智的ywj 机智的ywj 5天内算重复
    2022-07-29 15:54 
  • lxy2 lxy2 回复 机智的ywj 就是这个五天看不明白,2号是算哪个五天内,20号又算哪个五天内,为啥中间的那两天不在五天内
    2022-07-29 15:58 
  • 用户jGnXs7014103 用户jGnXs7014103(提问者) 回复 lxy2 2号算1号的重复投诉,后面9号,9-2>5当然不算啦。17号-9也大于5,20-17...
    2022-07-29 17:02 
  • lxy2 lxy2 回复 用户jGnXs7014103(提问者) with a as( select \'a1\' as 账号,\'A\'AS 号码,\'2022-07-01\' as 时间 UNION ALL select \'a2\' as 账号,\'A\'AS 号码,\'2022-07-02\' as 时间 UNION ALL select \'a3\' as 账号,\'A\'AS 号码,\'2022-07-09\' as 时间 UNION ALL select \'a4\' as 账号,\'A\'AS 号码,\'2022-07-17\' as 时间 UNION ALL select \'a5\' as 账号,\'A\'AS 号码,\'2022-07-20\' as 时间 UNION ALL select \'a1\' as 账号,\'b\'AS 号码,\'2022-07-01\' as 时间 UNION ALL select \'a1\' as 账号,\'b\'AS 号码,\'2022-07-05\' as 时间 ), b as ( select *,ROW_NUMBER()over(partition by 号码 order by 时间 desc )序号 from a ), c as( select *, datediff(D,lead(时间,1)over(partition by 号码 order by 时间 desc ),时间) as 时间差, lead(时间,1)over(partition by 号码 order by 时间 desc ) as 新时间, case when datediff(D,lead(时间,1)over(partition by 号码 order by 时间 desc ),时间)>=0 and datediff(D,lead(时间,1)over(partition by 号码 order by 时间 desc ),时间)<=5 then 1 else 0 end as 计数 from b ) select sum(计数) as 总数量, 账号 from c group by 账号--看看这个是不是你要的呢
    2022-07-29 17:18 
  • 用户jGnXs7014103 用户jGnXs7014103(提问者) 回复 lxy2 实现了,感谢大佬! 问个小问题,新起的时间差和新时间两个字段有在哪里用到吗?不是很理解,求解答。
    2022-07-29 18:12 
最佳回答
0
CD20160914Lv8专家互助
发布于2022-7-29 12:45

没有太明白你的这个需求到底要如何的。截图的号码不一样。账号不一样。不知道要如何统计。

  • 用户jGnXs7014103 用户jGnXs7014103(提问者) 不需要账号一样,如果有一条数据有一个相同的号码存在并且是五天内重复的,就算为1,再按账号把这些1求和起来
    2022-07-29 12:48 
  • CD20160914 CD20160914 回复 用户jGnXs7014103(提问者) 5天内。这个要循环?不是很明白。。1000在1号出现了,3号出现了,然后7号出现了,,这种 如何算。你数据是行数据每天都在往后面循环?1号-5号。。2-6号。。3-7号这类推,那这个号码不是要算多次了?
    2022-07-29 12:51 
  • 用户jGnXs7014103 用户jGnXs7014103(提问者) 回复 CD20160914 数据表里投诉时间最早的那条不算重复投诉,你说的这个的话算3号和7号是重复的,如果7号后面还有一条13号,13号这条就不算,是的,表里面的数据是累加的
    2022-07-29 13:12 
  • CD20160914 CD20160914 回复 用户jGnXs7014103(提问者) 还是没有怎么明白。。。假如这个号码从1-12号每天都有投诉,你最终要的结果是什么,截图举例说明一下?
    2022-07-29 13:19 
  • 用户jGnXs7014103 用户jGnXs7014103(提问者) 回复 CD20160914 看我问题补充的截图,不知道我说的清不清楚
    2022-07-29 13:54 
最佳回答
0
机智的ywjLv5初级互助
发布于2022-7-29 13:50

你这个五天如果是一直可以每天推移下去的这个算法就没什么意义,如果是时间段范围的,举个例子比如一周内的用户重复投诉次数,只要判断时间区间内周一-周日相同号码的次数就可以,那要点就转移到时间的区间,是怎么取的问题

最佳回答
0
蒲公英FZLJLv5初级互助
发布于2022-7-29 15:05

试试这样 select 客户电话,投诉时间,lag(投诉时间)over(partition by 客户电话 order by 投诉时间)

  • 用户jGnXs7014103 用户jGnXs7014103(提问者) 我最先用的就是这个方法,但是我后面要进行按账号统计,又会打乱回原来的样子,统出来数不对。
    2022-07-29 16:58 
最佳回答
0
ZxxTLv6初级互助
发布于2022-7-29 15:37(编辑于 2022-7-29 15:37)

你这个,先统计同一账号,同一电话出现的次数,再限制时间为五天内不就行了吗?

  • 用户jGnXs7014103 用户jGnXs7014103(提问者) 没太理解,但是我账号是不需要相同的,只要同一电话、五天内就算,或者给它另起一列满足条件给个TRUE、FALSE,后面我再按账号统计。
    2022-07-29 17:01 
  • 7关注人数
  • 682浏览人数
  • 最后回答于:2022-7-29 15:47
    请选择关闭问题的原因
    确定 取消
    返回顶部