今天在逛论坛的时候发现了这个帖子:怎么实现这个呢,有没有什么模板可以参考一下的呢。咋一看,正好跟前几天同事发给我看的那个sql题十分相似
于是趁着今晚美好的月光,咳咳,写了这篇文档。
先抛开sql不提,帆软设计器其实为我们这种需求提供了一个很方便的方法,那就是相邻连续分组
这里面采用的数据就是上面NBA球队的数据,第一列数据放的是球队名,设置为分组-相邻连续,后面三列都放年份,设置分别为汇总-最小值,汇总-最大值,汇总-个数。预览效果如下:
然后我们在年份那一列设置条件属性如下,就可以实现只展示连续夺冠的队伍:
在这里附上模板
连续夺冠队.cpt
(4.16 KB, 下载次数: 52, 售价: 20 个F豆)
好,说完了设计器,我们回到sql上,当数据量比较少时,利用设计器的功能即方便又快速,如果数据量比较大,我们还是用sql处理比较好。
这里以Oracle为例,因为我之前搞出这个sql时,写了一篇解决的思路,这里就不赘述了,直接上最终sql:
- select team,min(y),max(y),count(1) from (
- select team,y,sum(b)over(order by y)c
- from
- (
- select team,y,
- case
- when team=lag(team)over(order by y) then 0 else 1 end as b
- from nba))
- group by c,team having count(1)>1
- order by c
复制代码 效果如下:
顺便说下,表结构就两个字段,team是队名,Y是年份。
另外,如果想清楚思路的话,可以看我的博客:Oracle求连续区间最大最小值
|