楼主: reborn

[精华] 如何sql查询出连续号码段

[复制链接]
chinazjq 该用户已被删除
31#
发表于 2007-9-5 10:57 | 只看该作者
学习了

使用道具 举报

回复
论坛徽章:
0
32#
发表于 2007-9-5 19:00 | 只看该作者
我今天也写出来了,不过和5楼的差不多.其他的思路看来还得多多学习啊.

使用道具 举报

回复
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:11奥运会纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
33#
发表于 2007-9-7 16:36 | 只看该作者
最初由 fount100 发布
[B]hanjs 的方法有问题执行结果中第一列(002  001  250)最后一列为什么是“250”而不是“100”? [/B]


那里有问题?

使用道具 举报

回复
论坛徽章:
273
生肖徽章2007版:猪
日期:2008-09-27 09:35:45明尼苏达森林狼
日期:2009-01-12 14:15:09生肖徽章2007版:猪
日期:2009-01-21 16:30:59布鲁克林篮网
日期:2009-03-03 14:42:32圣安东尼奥马刺
日期:2009-03-03 14:44:41生肖徽章2007版:鸡
日期:2009-03-03 21:45:52生肖徽章2007版:牛
日期:2009-03-09 14:03:42生肖徽章2007版:猪
日期:2009-03-10 21:37:00生肖徽章2007版:羊
日期:2009-03-16 10:17:11生肖徽章2007版:虎
日期:2009-03-24 21:26:52
34#
发表于 2007-9-9 10:05 | 只看该作者
又学到了

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
35#
发表于 2008-1-27 18:27 | 只看该作者
原帖由 hmxxyy 于 05-4-30 00:54 发表
还真引出玉来了

SQL> select b.fphm,min(b.kshm),max(b.kshm)
  2  from (
  3          select a.*,to_number(a.kshm-rownum) cc
  4          from (
  5                  select * from t order by fphm,kshm
  6          ) a
  7  )  b
  8  group by b.fphm,b.cc
  9  /

引自http://blog.itpub.net/post/5042/27936

绝!



更简洁的写法

原帖由 grubbyoo 于 07-12-4 12:25 发表
3.1.1        题例
我有一个表结构,
fphm,kshm
2014,00000001
2014,00000002
2014,00000003
2014,00000004
2014,00000005
2014,00000007
2014,00000008
2014,00000009
2013,00000120
2013,00000121
2013,00000122
2013,00000124
2013,00000125

(第二个字段内可能是连续的数据,可能存在断点。)

怎样能查询出来这样的结果,查询出连续的记录来。
就像下面的这样?
2014,00000001,00000005
2014,00000009,00000007
2013,00000120,00000122
2013,00000124,00000125


可以这样写



select max(fphm),min(kshm),max(kshm)
from test
group by fphm||khsm-rownum

使用道具 举报

回复
论坛徽章:
30
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-11-06 08:17:37数据库板块每日发贴之星
日期:2008-08-21 01:02:42NBA常规赛纪念章
日期:2008-04-18 19:48:162008新春纪念徽章
日期:2008-02-13 12:43:03数据库板块每日发贴之星
日期:2008-02-13 01:04:46数据库板块每日发贴之星
日期:2008-02-10 01:03:46数据库板块每日发贴之星
日期:2008-02-08 01:04:31数据库板块每日发贴之星
日期:2008-02-06 01:05:09祖国60周年纪念徽章
日期:2009-10-09 08:28:00
36#
发表于 2008-2-7 11:42 | 只看该作者
多谢分享。

使用道具 举报

回复
论坛徽章:
2
八级虎吧徽章
日期:2008-12-24 12:00:59CTO参与奖
日期:2009-01-15 11:42:46
37#
发表于 2008-12-3 10:16 | 只看该作者
mark it for study

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:虎
日期:2009-01-07 17:29:302010广州亚运会纪念徽章:卡巴迪
日期:2011-04-17 16:39:06灰彻蛋
日期:2011-06-18 13:42:50ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51复活蛋
日期:2011-12-27 17:46:382012新春纪念徽章
日期:2012-01-04 11:54:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19
38#
发表于 2008-12-4 16:28 | 只看该作者
頂了。GOOD。

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:虎
日期:2009-01-07 17:29:302010广州亚运会纪念徽章:卡巴迪
日期:2011-04-17 16:39:06灰彻蛋
日期:2011-06-18 13:42:50ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51复活蛋
日期:2011-12-27 17:46:382012新春纪念徽章
日期:2012-01-04 11:54:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19
39#
发表于 2008-12-4 17:27 | 只看该作者
8# 太牛了。。。佩服

使用道具 举报

回复
论坛徽章:
3
CTO参与奖
日期:2009-01-15 11:42:462010新春纪念徽章
日期:2010-01-04 08:33:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
40#
发表于 2008-12-5 14:56 | 只看该作者

/* 建表脚本 */
create table demo(fphm char(4),kshm char(8));
INSERT INTO demo VALUES('2014','00000001');
INSERT INTO demo VALUES('2014','00000002');
INSERT INTO demo VALUES('2014','00000003');
INSERT INTO demo VALUES('2014','00000004');
INSERT INTO demo VALUES('2014','00000005');
INSERT INTO demo VALUES('2014','00000007');
INSERT INTO demo VALUES('2014','00000008');
INSERT INTO demo VALUES('2014','00000009');
INSERT INTO demo VALUES('2013','00000120');
INSERT INTO demo VALUES('2013','00000121');
INSERT INTO demo VALUES('2013','00000122');
INSERT INTO demo VALUES('2013','00000124');
INSERT INTO demo VALUES('2013','00000125');
COMMIT;


/* SQL */

SELECT fphm,MIN(kshm),MAX(kshm)
FROM
(
  SELECT fphm,kshm,SUM(seq) over (ORDER BY kshm) p
  FROM
  (
    SELECT fphm,
    kshm,
    CASE TO_NUMBER(lag(kshm) over (PARTITION BY fphm ORDER BY kshm)) WHEN TO_NUMBER(kshm)-1 THEN 0 ELSE 1 END seq
    FROM demo
  )
)
GROUP BY fphm, p;

/* 执行结果

FPHM MIN(KSHM MAX(KSHM
---- -------- --------
2014 00000001 00000005
2014 00000007 00000009
2013 00000120 00000122
2013 00000124 00000125
*/

使用道具 举报

回复

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

本版积分规则 发表回复

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