楼主: arentt

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

[复制链接]
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
11#
发表于 2008-11-18 15:08 | 只看该作者
原帖由 grubbyoo 于 2008-11-18 13:29 发表
哈哈 感觉一个select 能实现, nyfor大侠来一个吧

这个是谁的专利来着? 是你的吧
原帖由 grubbyoo 于 2008-11-18 13:40 发表
请教nyfor一个问题,  wmsys.sys_concat 可以 对返回值 排序吗

没有研究过, 看之前的帖子讨论说资料太多的情况下可能不是有序的.
但自定义一个这样的聚集函数可以按你需要的进行排序

使用道具 举报

回复
论坛徽章:
21
红旗
日期:2013-09-30 15:26:01凯迪拉克
日期:2013-10-23 12:48:26比亚迪
日期:2013-11-01 09:19:01奔驰
日期:2013-12-13 09:27:30马上有对象
日期:2014-11-18 10:46:242015年新春福章
日期:2015-04-28 15:24:55慢羊羊
日期:2015-05-28 09:49:31
12#
发表于 2008-11-18 15:14 | 只看该作者

回复 #11 nyfor 的帖子

找到了 nyfor可以试一试 这个  很强悍 ,竟然可以这么用 wmsys.wm_concat() over(partition by .. order  by ...)

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
13#
发表于 2008-11-18 15:17 | 只看该作者
使用wmsys.wm_concat效率如何, 有何限制?

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
14#
发表于 2008-11-18 15:30 | 只看该作者
原帖由 grubbyoo 于 2008-11-18 15:14 发表
找到了 nyfor可以试一试 这个  很强悍 ,竟然可以这么用 wmsys.wm_concat() over(partition by .. order  by ...)

呵呵,任何集聚函数都可以这么用, 包括自定义的集聚函数.

使用道具 举报

回复
论坛徽章:
21
红旗
日期:2013-09-30 15:26:01凯迪拉克
日期:2013-10-23 12:48:26比亚迪
日期:2013-11-01 09:19:01奔驰
日期:2013-12-13 09:27:30马上有对象
日期:2014-11-18 10:46:242015年新春福章
日期:2015-04-28 15:24:55慢羊羊
日期:2015-05-28 09:49:31
15#
发表于 2008-11-18 15:39 | 只看该作者
原帖由 nyfor 于 2008-11-18 15:30 发表

呵呵,任何集聚函数都可以这么用, 包括自定义的集聚函数.


  太感谢了,今天又进步一点

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
16#
发表于 2008-11-18 16:20 | 只看该作者
自定义聚集函数的例子

  1. create or replace type agg_t as object (

  2.     str_agg varchar2(4000),

  3.     static function ODCIAggregateInitialize(sctx  in out agg_t)
  4.                     return number,

  5.     member function ODCIAggregateIterate   (self  in out agg_t,
  6.                                             value in varchar2 )
  7.                     return number,

  8.     member function ODCIAggregateTerminate (self         in     agg_t   ,
  9.                                             return_value    out varchar2,
  10.                                             flags        in number      )               
  11.                     return number,

  12.     member function ODCIAggregateMerge(self in out agg_t,
  13.                                        ctx2 in agg_t    )
  14.                     return number
  15. );
  16. /

  17. create or replace type body agg_t is

  18.     static function ODCIAggregateInitialize(sctx in out agg_t)
  19.         return number is
  20.     begin
  21.         sctx := agg_t(null);
  22.         return ODCIConst.Success;
  23.     end;

  24.     member function ODCIAggregateIterate(
  25.       self in out agg_t, value in varchar2)
  26.         return number is
  27.     begin
  28.         str_agg := str_agg || value;
  29.         return ODCIConst.Success;
  30.     end;

  31.     member function ODCIAggregateTerminate(self in agg_t,
  32.         return_value out varchar2, flags in number) return number is
  33.     begin
  34.         return_value := str_agg;
  35.         return ODCIConst.Success;
  36.     end;

  37.     member function ODCIAggregateMerge(self in out agg_t,
  38.         ctx2 in agg_t) return number is
  39.     begin
  40.         str_agg := str_agg || ctx2.str_agg;
  41.         return ODCIConst.Success;
  42.     end;
  43. end;
  44. /

  45. create or replace function agg_concat (input varchar2) return varchar2
  46.     parallel_enable aggregate using agg_t;
  47. /
  48. create table agg_test (
  49.   a number,
  50.   b varchar2(5)
  51. );

  52. insert into agg_test values (1,'a');
  53. insert into agg_test values (2,'A');
  54. insert into agg_test values (1,'b');
  55. insert into agg_test values (1,'c');
  56. insert into agg_test values (2,'B');
  57. insert into agg_test values (2,'C');
  58. insert into agg_test values (1,'d');
  59. insert into agg_test values (2,'D');
  60. column b_conc format a30
  61. select
  62.   a, agg_concat(b) b_conc from agg_test
  63. group by
  64.   a;
  65.         A B_CONC
  66. ---------- ------------------------------
  67.          1 abcd
  68.          2 ABCD
复制代码

使用道具 举报

回复
论坛徽章:
21
红旗
日期:2013-09-30 15:26:01凯迪拉克
日期:2013-10-23 12:48:26比亚迪
日期:2013-11-01 09:19:01奔驰
日期:2013-12-13 09:27:30马上有对象
日期:2014-11-18 10:46:242015年新春福章
日期:2015-04-28 15:24:55慢羊羊
日期:2015-05-28 09:49:31
17#
发表于 2008-11-18 16:46 | 只看该作者

回复 #16 dingjun123 的帖子

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
18#
发表于 2008-11-18 17:36 | 只看该作者
自定义集聚函数, 只要把这个模板保存起来, 以后想要什么样的就可以得到什么样的

使用道具 举报

回复
论坛徽章:
6
生肖徽章2007版:鼠
日期:2008-01-02 17:35:53奥运会纪念徽章:排球
日期:2008-10-24 13:30:01生肖徽章2007版:狗
日期:2009-06-16 16:00:282009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:虎
日期:2009-08-03 11:42:32ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
19#
发表于 2008-11-18 21:01 | 只看该作者
试试这个

select t3.tel_no, max(t4.rn - t3.rn)
  from (select rownum as rn,
               t.tel_no,
               t.call_date_time,
               decode(t.call_result, 01, 1, 0) as times
          from test t
         order by t.tel_no, t.call_date_time) t3
inner join (select rownum as rn,
                    t.tel_no,
                    t.call_date_time,
                    decode(t.call_result, 01, 1, 0) as times
               from test t
              order by t.tel_no, t.call_date_time) t4 on t3.tel_no =
                                                         t4.tel_no

where t4.times = 0
      
   and t3.times = 1
   and t4.rn > t3.rn
      
   and t4.call_date_time = (select min(t5.call_date_time)
                              from (select rownum as rn,
                                           t.tel_no,
                                           t.call_date_time,
                                           decode(t.call_result, 01, 1, 0) as times
                                      from test t
                                     order by t.tel_no, t.call_date_time) t5
                             where t5.tel_no = t3.tel_no
                               and t5.times = 0
                               and t5.rn > t3.rn)
group by t3.tel_no
order by t3.tel_no

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
20#
发表于 2008-11-18 23:58 | 只看该作者
原帖由 grubbyoo 于 2008-11-18 15:14 发表
找到了 nyfor可以试一试 这个  很强悍 ,竟然可以这么用 wmsys.wm_concat() over(partition by .. order  by ...)


在group by中使用,顺序没有保证;用作分析函数,顺序得到保证。但就是得再用MAX把最后那个取出来。

使用道具 举报

回复

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

本版积分规则 发表回复

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