加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle中取连续三天以上的数据

(2013-01-07 15:21:38)
标签:

格式

行号

要点

日期

取连续三天以上的数据

分类: Oracle

需求:用sql实现取连续三天以上的数据

实现:

select begin_dt
 from (select begin_dt, count(*) over(partition by ch) cnt
         from (select begin_dt,
                      to_date(begin_dt, 'yyyy-mm-dd') - row_number() over(order by begin_dt) ch
                 from liur_account)
       )
 where cnt >= 3;

要点说明:

row_number() over(order by begin_dt) 根据begin_dt日期大小排序,然后取数据的行号;

to_date(begin_dt, 'yyyy-mm-dd') - row_number() over(order by begin_dt) ch 用日期减去行号,得到一列日期格式的值,如果日期是连续的,得到的日期值将是一样的;

count(*) over(partition by ch)cnt 根据以上减去的结果分组,每行做一次count;

在Excel中模拟一个取连续值的算法:

       begin_dt row_number result

2012/1/1 1 2011/12/31
2012/1/2 2 2011/12/31
2012/1/3 3 2011/12/31
2012/1/4 4 2011/12/31
2012/1/5 5 2011/12/31
2012/1/6 6 2011/12/31
2012/1/8 7 2012/1/1
2012/1/9 8 2012/1/1
2012/1/10 9 2012/1/1
2012/1/11 10 2012/1/1
2012/1/12 11 2012/1/1
2012/1/13 12 2012/1/1
2012/1/14 13 2012/1/1
2012/1/15 14 2012/1/1
2012/1/16 15 2012/1/1
2012/1/18 16 2012/1/2
2012/1/21 17 2012/1/4
2012/1/22 18 2012/1/4
2012/1/23 19 2012/1/4
2012/1/24 20 2012/1/4
2012/1/25 21 2012/1/4
2012/1/26 22 2012/1/4

 

 

0

阅读 收藏 喜欢 打印举报/Report
后一篇:UE删除空行
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有