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
---------- ---------------------------------------
公牛 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
解决方案 »
- oracle 11g win7_64位 乱码
- oracle存储过程,变量如何加单引号
- 为什么我不能成功操作文件
- oracle数据库连接access错误
- sqlserver的函数如何转换为oracle 10g的函数
- java程序从Oracle中查出4万多条数据,然后全部写入Excel文件,怎么写并且效率高呢?
- 如何改已建例程的字符集?简体中文的字符集应选那个?
- 关于服务的启动的问题
- 想问一个问题好久了,oracle到底有没有像sql server那样的联机手册呀?
- 一个数据库链的问题
- 如何將oracle的table、function、procedure、trigger轉入Mysql?
- oracle恢复安装
2 SELECT '公牛' team,1992 y FROM DUAL UNION ALL
3 SELECT '公牛' team,1993 y FROM DUAL UNION ALL
4 SELECT '火箭' team,1994 y FROM DUAL UNION ALL
5 SELECT '火箭' team,1995 y FROM DUAL UNION ALL
6 SELECT '公牛' team,1996 y FROM DUAL UNION ALL
7 SELECT '公牛' team,1997 y FROM DUAL UNION ALL
8 SELECT '公牛' team,1998 y FROM DUAL UNION ALL
9 SELECT 'ma刺' team,1999 y FROM DUAL UNION ALL
10 SELECT '湖人' team,2000 y FROM DUAL UNION ALL
11 SELECT '湖人' team,2001 y FROM DUAL UNION ALL
12 SELECT '湖人' team,2002 y FROM DUAL UNION ALL
13 SELECT 'ma刺' team,2003 y FROM DUAL UNION ALL
14 SELECT '活塞' team,2004 y FROM DUAL UNION ALL
15 SELECT 'ma刺' team,2005 y FROM DUAL UNION ALL
16 SELECT 're火' team,2006 y FROM DUAL UNION ALL
17 SELECT 'ma刺' team,2007 y FROM DUAL UNION ALL
18 SELECT 'kaier特人' team,2008 y FROM DUAL UNION ALL
19 SELECT '湖人' team,2009 y FROM DUAL UNION ALL
20 SELECT '湖人' team,2010 y FROM DUAL
21 )
22 SELECT t2.team,
23 MIN(t2.y) start_hm,
24 MAX(t2.y) end_hm
25 FROM (SELECT t.team,
26 t.y,
27 t.y - ROW_NUMBER() OVER(PARTITION BY t.team ORDER BY t.y) y1
28 FROM t) t2
29 GROUP BY t2.team,
30 t2.y1
31 HAVING COUNT(*) > 1
32 ;TEAM START_HM END_HM
----------- ---------- ----------
公牛 1996 1998
湖人 2000 2002
火箭 1994 1995
湖人 2009 2010
公牛 1992 1993
from T
where Y - nextY = 1
with t as 是啥呀
b.[TEAM],b.[Y] AS START_HM,MIN(a.[Y]) AS END_HM
FROM
(Select * from TableName AS a WHERE NOT EXISTS(SELECT 1 FROM TableName WHERE [TEAM]=a.[TEAM] AND [Y]=a.[Y]+1)) AS a
INNER JOIN
(Select * from TableName AS a WHERE NOT EXISTS(SELECT 1 FROM TableName WHERE [TEAM]=a.[TEAM] AND [Y]=a.[Y]-1)) AS b ON a.[TEAM]=b.[TEAM] AND b.[Y] <=a.[Y]
GROUP BY b.[TEAM],b.[Y]
HAVING MIN(a.[Y])-b.[Y]>=1
ORDER BY MIN(a.[Y])-b.[Y] DESC
MIN(t2.y) start_hm,
MAX(t2.y) end_hm
FROM (
SELECT team,y,y - rank y1 from (
SELECT tmp.team,
tmp.y,
IF(@groupid = tmp.team,@rank := @rank + 1,@rank := 1) AS rank,
@groupid := tmp.team
FROM (SELECT team,y FROM teamtb ORDER BY y) tmp,
(SELECT @rank := 0,@groupid := '') a
) b
) t2
GROUP BY t2.team,
t2.y1
HAVING COUNT(*) > 1
---------- ---------------------------------------
公牛 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
湖人不是有5次吗???
select TEAM,sum(TEAM) number,max(Y) START_HM,min(Y)END_HM
from table_name
where number>=2 and START_HM-END_HM<=number
group by TEAM
TEAM START_HM END_HM
湖人 2000 2002
湖人 2009 2010
start,end这两次字看到了么???
2000 2001 2002 2009 2010
select b.team team,min(y) miny,max(y) maxy
from (select team,y from t_test2 order by team,y) b
group by b.team,to_number(b.y-ROWNUM)
) c where miny != maxy另外一帖子里面一位高人写的。这sql确实有点难,规律不太容易看出来,我没调试出来,看到另帖子的人写了才恍然大悟。先根据team和y排序。然后将结果中的y-ROWNUM。这样子再根据team和y-ROWNUM排序后,miny和maxy不相等的那些就是结果了。
from (select t.team, min(t.y) i, max(t.y) k from t group by t.team) a
where a.i <> a.k试试这条SQL看看。
Select TEAM, MIN(Y) START_HM, MAX(Y) END_HM From dbo.T_Team_Champ
Where TEAM in (Select TEAM From (Select TEAM, Count(*) CHA_COUNT
From dbo.T_Team_Champ Group By TEAM Having Count(*) >= 2) a) Group By TEAM
select team tm,min(y) miny,max(y) maxy from (
select team,y from t order by team,y)
group by team,y-rownum)
where miny-maxy<>0;
公牛 1996 1998
火箭 1994 1995
公牛 1992 1993
湖人 2000 2002
湖人 2009 2010