ITPub博客

首页 > 大数据 > 可视化 > 关于在工作当中判断连续值的问题,SQL的解法!

关于在工作当中判断连续值的问题,SQL的解法!

原创 可视化 作者:hu825065235 时间:2015-04-18 21:38:30 0 删除 编辑

废话不多说,直接上需求:
---构建数据
create table nba(y number(4),team varchar2(20));
insert into nba values(1947,'费城勇士');
insert into nba values(1948,'巴尔蒂莫子弹');
insert into nba values(1949,'明尼阿波利斯湖人');
insert into nba values(1950,'明尼阿波利斯湖人');
insert into nba values(1951,'皇家罗切斯特');
insert into nba values(1952,'明尼阿波利斯湖人');
insert into nba values(1953,'明尼阿波利斯湖人');
insert into nba values(1954,'明尼阿波利斯湖人');
insert into nba values(1955,'塞拉库斯民族');
insert into nba values(1956,'费城勇士');
insert into nba values(1957,'波士顿凯尔特人');
insert into nba values(1958,'圣路易斯老鹰');
insert into nba values(1959,'波士顿凯尔特人');
insert into nba values(1960,'波士顿凯尔特人');
insert into nba values(1961,'波士顿凯尔特人');
insert into nba values(1962,'波士顿凯尔特人');
insert into nba values(1963,'波士顿凯尔特人');
insert into nba values(1964,'波士顿凯尔特人');
insert into nba values(1965,'波士顿凯尔特人');
insert into nba values(1966,'波士顿凯尔特人');
insert into nba values(1967,'费城76人');
insert into nba values(1968,'波士顿凯尔特人');
insert into nba values(1969,'波士顿凯尔特人');
insert into nba values(1970,'纽约尼克斯');
insert into nba values(1971,'密尔沃基雄鹿');
insert into nba values(1972,'洛杉矶湖人');
insert into nba values(1973,'纽约尼克斯');
insert into nba values(1974,'波士顿凯尔特人');
insert into nba values(1975,'金州勇士');
insert into nba values(1976,'波士顿凯尔特人');
insert into nba values(1977,'波特兰开拓者');
insert into nba values(1978,'华盛顿子弹');
insert into nba values(1979,'西雅图超音速');
insert into nba values(1980,'洛杉矶湖人');
insert into nba values(1981,'波士顿凯尔特人');
insert into nba values(1982,'洛杉矶湖人');
insert into nba values(1983,'费城76人');
insert into nba values(1984,'波士顿凯尔特人');
insert into nba values(1985,'洛杉矶湖人');
insert into nba values(1986,'波士顿凯尔特人');
insert into nba values(1987,'洛杉矶湖人');
insert into nba values(1988,'洛杉矶湖人');
insert into nba values(1989,'底特律活塞');
insert into nba values(1990,'底特律活塞');
insert into nba values(1991,'芝加哥公牛');
insert into nba values(1992,'芝加哥公牛');
insert into nba values(1993,'芝加哥公牛');
insert into nba values(1994,'休斯顿火箭');
insert into nba values(1995,'休斯顿火箭');
insert into nba values(1996,'芝加哥公牛');
insert into nba values(1997,'芝加哥公牛');
insert into nba values(1998,'芝加哥公牛');
insert into nba values(1999,'圣安东尼奥马刺');
insert into nba values(2000,'洛杉矶湖人');
insert into nba values(2001,'洛杉矶湖人');
insert into nba values(2002,'洛杉矶湖人');
insert into nba values(2003,'圣安东尼奥马刺');
insert into nba values(2004,'底特律活塞');
insert into nba values(2005,'圣安东尼奥马刺');
insert into nba values(2006,'迈阿密热火');
insert into nba values(2007,'圣安东尼奥马刺');
insert into nba values(2008,'波士顿凯尔特人');
insert into nba values(2009,'洛杉矶湖人');
insert into nba values(2010,'洛杉矶湖人');
insert into nba values(2011,'达拉斯小牛');
insert into nba values(2012,'迈阿密热火');
insert into nba values(2013,'迈阿密热火');
insert into nba values(2014,'圣安东尼奥马刺');
commit;

要求查询结果如下:
球队                开始年份    结束年份
明尼阿波利斯湖人    1949        1950
明尼阿波利斯湖人    1952        1954
波士顿凯尔特人      1959        1966
波士顿凯尔特人      1968        1969
洛杉矶湖人          1987        1988
底特律活塞          1989        1990
芝加哥公牛          1991        1993
休斯顿火箭          1994        1995
芝加哥公牛          1996        1998
洛杉矶湖人          2000        2002
洛杉矶湖人          2009        2010
迈阿密热火          2012        2013

SQL解法:


SELECT team ,min_y ,max_y  FROM  (SELECT TEAM,COUNT(1) AS cnt, MIN(Y) AS min_y, MAX(Y) AS max_y ,rn
  FROM (SELECT ROWNUM,
               NBA.Y,
               NBA.TEAM,
               ROWNUM - ROW_NUMBER() OVER(PARTITION BY TEAM ORDER BY Y) AS RN
          FROM NBA
         ORDER BY Y)GROUP BY team, rn  )WHERE cnt >1 ORDER  BY min_y ASC ;

效果图:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29507357/viewspace-1585137/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-26

  • 博文量
    34
  • 访问量
    83414