连续区间求值方案

楼主
我是社区第73248位番薯,欢迎点我头像关注我哦~
今天在逛论坛的时候发现了这个帖子:怎么实现这个呢,有没有什么模板可以参考一下的呢。咋一看,正好跟前几天同事发给我看的那个sql题十分相似

于是趁着今晚美好的月光,咳咳,写了这篇文档。
先抛开sql不提,帆软设计器其实为我们这种需求提供了一个很方便的方法,那就是相邻连续分组

这里面采用的数据就是上面NBA球队的数据,第一列数据放的是球队名,设置为分组-相邻连续,后面三列都放年份,设置分别为汇总-最小值,汇总-最大值,汇总-个数。预览效果如下:

然后我们在年份那一列设置条件属性如下,就可以实现只展示连续夺冠的队伍:



在这里附上模板 连续夺冠队.cpt (4.16 KB, 下载次数: 52, 售价: 20 个F豆)

好,说完了设计器,我们回到sql上,当数据量比较少时,利用设计器的功能即方便又快速,如果数据量比较大,我们还是用sql处理比较好。
这里以Oracle为例,因为我之前搞出这个sql时,写了一篇解决的思路,这里就不赘述了,直接上最终sql:
  1. select team,min(y),max(y),count(1) from (
  2. select team,y,sum(b)over(order by y)c
  3. from
  4. (
  5. select team,y,
  6. case
  7.   when team=lag(team)over(order by y) then 0 else 1 end as b
  8. from nba))
  9. group by c,team having count(1)>1
  10. order by c
复制代码
效果如下:

顺便说下,表结构就两个字段,team是队名,Y是年份。
另外,如果想清楚思路的话,可以看我的博客:Oracle求连续区间最大最小值

分享扩散:
参与人数 +1 F豆 +666 理由
兔子酱 + 666 感谢参与精华帖奖励计划~~

查看全部评分

沙发
发表于 2017-11-1 20:50:30
沙发。先给楼主分享知识的精神点赞,坐等@橙子君 提名精华帖
板凳
发表于 2017-11-2 09:07:50
棒棒哒!
地板
发表于 2017-11-2 09:18:39
此问题在去年就有人问过 早就有人回答过了 此问题应该是哪个公司考核题。已经连续有3人问过几个同样的问题  
http://bbs.fanruan.com/thread-82318-1-1.html
编辑于 2017-11-2 09:21  
5楼
发表于 2017-11-2 09:23:11
感谢投稿,已提名精华帖,待论坛运营委员会评分后可评为精华帖,帆软论坛精华帖奖励计划http://bbs.fanruan.com/thread-91079-1-1.html
6楼
发表于 2017-11-2 22:17:51
学习了 很好
7楼
发表于 2021-10-11 17:03:38
有点问题,如果湖人在2009,2010后面加一个2015,那么结束会在2015,而且会把2009,2010,2015都算成连续夺冠
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

9回帖数 2关注人数 39163浏览人数
最后回复于:2021-10-11 17:03

返回顶部 返回列表