网上看到一个开发面试题,我也拿来研究了一下。
表nba记录了nba(team VARCHAR2(10),y NUMBER(4))夺冠球队的名称及年份
TEAM Y -------------------- ------------------------------ 活塞 1990 公牛 1991 公牛 1992 公牛 1993 火箭 1994 火箭 1995 公牛 1996 公牛 1997 公牛 1998
请写出一条SQL语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少,结果如下:
TEAM B E ------------------------------ -------------------------------- 公牛 1991 1993 火箭 1994 1995 公牛 1996 1998
写法如下:
select t.team, min(t.ay) as bg , max(t.ay)+1 as ed from (select b.team, a.y as ay from nba a, nba b where a.team = b.team and a.y = b.y - 1 order by a.y) t group by t.team,(t.ay-rownum)
分析:
1. 在t表里,把有连续夺冠的球队查询出来,包括球队,和年份,能取到开始,但是结束需要加1。
2.分组,排好序后,根据 (年份-rownum),因为是按年排序,又减去一个rownum,所以team一样的,年份减去rownum后,
年份-rownum也会一样。看样子,以后想分组不一样值的字段,减去某个变量,类似rownum,实现减去后的值一样,达到分组效果。
这个sql还是很巧妙的,拓展我的思维了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25027760/viewspace-1139759/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25027760/viewspace-1139759/