123
返回列表 发新帖
楼主: arentt

[SQL] 求一个某字段连续重复最大次数的SQL的写法

[复制链接]
论坛徽章:
3
CTO参与奖
日期:2009-01-15 11:42:462010新春纪念徽章
日期:2010-01-04 08:33:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
21#
发表于 2008-11-19 00:42 | 只看该作者

select tel_no, max(num)
  from (select tel_no, count(tel_no) num
          from (select tel_no,
                       call_result,
                       sum(lg) over(order by tel_no, call_date_time, call_result) pv
                  from (select tel_no,
                               call_date_time,
                               call_result,
                               case lag(call_result, 1, '09')
                                over(order by tel_no,
                                     call_date_time,
                                     call_result)
                                 when '01' then
                                  0
                                 else
                                  1
                               end lg
                          from test t))
         where call_result = '01'
         group by tel_no, pv)
group by tel_no


执行结果:


  1. TEL_NO          MAX(NUM)
  2. ------------- ----------
  3. 1333333333             4
  4. 1300000000             2

复制代码

[ 本帖最后由 addm 于 2008-11-19 00:47 编辑 ]

使用道具 举报

回复
论坛徽章:
6
CTO参与奖
日期:2009-02-20 09:44:20数据库板块每日发贴之星
日期:2009-04-02 01:01:032009日食纪念
日期:2009-07-22 09:30:002010新春纪念徽章
日期:2010-03-01 11:21:02咸鸭蛋
日期:2011-08-29 08:45:46ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
22#
发表于 2008-11-19 09:55 | 只看该作者
select tel_no,max(r2) r2 from
(
  select t.*,
         decode(call_result,prv,1,next,1,null) r1,
         case
           when call_result = prv and call_result != next then
              rn - nvl(max(case when call_result != '01' then rn end) over(partition by tel_no order by call_date_time),
                       min(case when prv is null then rn end) over(partition by tel_no order by call_date_time) - 1)
         end as r2
  from
  (
    select t.*,
           rownum rn,
           lag(call_result,1,null) over(partition by tel_no order by call_date_time) prv,
           lead(call_result,1,null) over(partition by tel_no order by call_date_time) next
    from test t
  ) t
) t group by tel_no

使用道具 举报

回复
论坛徽章:
6
CTO参与奖
日期:2009-02-20 09:44:20数据库板块每日发贴之星
日期:2009-04-02 01:01:032009日食纪念
日期:2009-07-22 09:30:002010新春纪念徽章
日期:2010-03-01 11:21:02咸鸭蛋
日期:2011-08-29 08:45:46ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
23#
发表于 2008-11-19 09:56 | 只看该作者
select tel_no,max(so) so from
(
  select t2.*,count(*) over(partition by tel_no,rn2 order by call_date_time) so from
  (
    select t1.*,sum(t1.r2) over(order by rn) rn2 from
    (
      select t.*,
             rownum rn,
             lag(call_result,1,call_result) over(order by rownum) r1,
             decode(call_result,
                        lag(call_result,1,call_result) over(order by rownum),0,1
                       ) r2
      from test t
    ) t1
  ) t2
) group by tel_no

使用道具 举报

回复
论坛徽章:
13
生肖徽章2007版:蛇
日期:2008-09-26 00:10:26生肖徽章2007版:兔
日期:2008-10-16 12:06:10生肖徽章2007版:羊
日期:2008-10-18 07:50:192009日食纪念
日期:2009-07-22 09:30:00
24#
发表于 2008-11-19 10:44 | 只看该作者

插一脚

以写代码为乐趣的各位,人生实在是太丰富了。
我重点要说的是M同学。

使用道具 举报

回复
princes1 该用户已被删除
25#
发表于 2008-11-19 12:14 | 只看该作者
SELECT * FROM TEST
WHERE ROWID IN (SELECT row_id
                   FROM (SELECT /*+full(TEST) parallel(TEST 5)*/
                          ROWID AS row_id,
                          row_number() over(PARTITION BY  TELL_NO ORDER BY CALL_RESULT desc) rn
                           FROM tyw_btq_a)
                  WHERE rn = 1);

使用道具 举报

回复
论坛徽章:
4
生肖徽章2007版:龙
日期:2009-03-14 13:37:322010新春纪念徽章
日期:2010-03-01 11:19:07懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
26#
发表于 2016-10-10 16:19 | 只看该作者
如果是计算每次连续的次数呢?

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表