sql查询问题

boer007 2011-10-25 05:03:47
TEAM (varchar2) Y(int)
---------- ---------------------------------------
公牛 1992
公牛 1993
火箭 1994
火箭 1995
公牛 1996
公牛 1997
公牛 1998
马刺 1999
湖人 2000
湖人 2001
湖人 2002
马刺 2003
活塞 2004
马刺 2005
热火 2006
马刺 2007
凯尔特人 2008
湖人 2009
湖人 2010

写一段sql语句,要求查出那个球队是连续两年以上夺冠的(包含2年),显示夺冠的开始和结束时间,显示效果如下:

TEAM START_HM END_HM
---------- ---------- ----------
公牛 1996 1998
火箭 1994 1995
公牛 1992 1993
湖人 2000 2002
湖人 2009 2010
...全文
104 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2011-10-25
  • 打赏
  • 举报
回复
WITH t AS (
SELECT '公牛' team,1992 y FROM DUAL UNION ALL
SELECT '公牛' team,1993 y FROM DUAL UNION ALL
SELECT '火箭' team,1994 y FROM DUAL UNION ALL
SELECT '火箭' team,1995 y FROM DUAL UNION ALL
SELECT '公牛' team,1996 y FROM DUAL UNION ALL
SELECT '公牛' team,1997 y FROM DUAL UNION ALL
SELECT '公牛' team,1998 y FROM DUAL UNION ALL
SELECT 'ma刺' team,1999 y FROM DUAL UNION ALL
SELECT '湖人' team,2000 y FROM DUAL UNION ALL
SELECT '湖人' team,2001 y FROM DUAL UNION ALL
SELECT '湖人' team,2002 y FROM DUAL UNION ALL
SELECT '马刺' team,2003 y FROM DUAL UNION ALL
SELECT '活塞' team,2004 y FROM DUAL UNION ALL
SELECT '马刺' team,2005 y FROM DUAL UNION ALL
SELECT '热火' team,2006 y FROM DUAL UNION ALL
SELECT '马刺' team,2007 y FROM DUAL UNION ALL
SELECT '凯尔特人' team,2008 y FROM DUAL UNION ALL
SELECT '湖人' team,2009 y FROM DUAL UNION ALL
SELECT '湖人' team,2010 y FROM DUAL
)
SELECT t2.team,
MIN(t2.y) start_hm,
MAX(t2.y) end_hm
FROM (SELECT t.team,
t.y,
t.y - ROW_NUMBER() OVER(PARTITION BY t.team ORDER BY t.y) y1
FROM t) t2
GROUP BY t2.team,
t2.y1
HAVING COUNT(*) > 1;


这是早上有人写的,一摸一样的问题.
funfenffun 2011-10-25
  • 打赏
  • 举报
回复

select t.team_t,t.Start_HM,t.End_HM
from (SELECT b.team team_t, MIN (b.y) Start_HM, MAX (b.y) End_HM
FROM (SELECT a.*, TO_NUMBER (a.y - ROWNUM) cc
FROM (SELECT * FROM winner ORDER BY team, y) a) b
GROUP BY b.team, b.cc) t
where t.Start_HM!=t.End_HM;

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧