成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL如何求解連續年份的問題?

數據庫
請寫出一條 SQL 語句,查詢出在此期間連續獲得冠軍的有哪些,其連續的年份的起止時間是多少?

[[414963]]

本文轉載自微信公眾號「SQL數據庫開發」,作者丶平凡世界。轉載本文請聯系SQL數據庫開發公眾號。

最近看到這樣一道題目,覺得挺有意思,給小伙伴們分享一下解題思路。

下表記錄了奪冠球隊的名稱及年份:

請寫出一條 SQL 語句,查詢出在此期間連續獲得冠軍的有哪些,其連續的年份的起止時間是多少?

查詢結果:

之前我們有講解如何求解連續多少天的問題,這個題有點類似,但是也有點不一樣的地方。

問題分析

一般連續性的問題,我們都需要使用笛卡爾積進行錯位匹配,就是類似a.ID=b.ID+1的這種。這一題我們也可以使用類似的方法。

具體代碼如下:

  1. CREATE TABLE  #t(TEAM varchar(20), Y int
  2. INSERT #t(TEAM,Y)  VALUES 
  3. ('活塞',1990), 
  4. ('公牛',1991), 
  5. ('公牛',1992), 
  6. ('公牛',1993), 
  7. ('火箭',1994), 
  8. ('火箭',1995), 
  9. ('公牛',1996), 
  10. ('公牛',1997), 
  11. ('公牛',1998), 
  12. ('馬刺',1999), 
  13. ('湖人',2000), 
  14. ('湖人',2001), 
  15. ('湖人',2002), 
  16. ('馬刺',2003), 
  17. ('活塞',2004), 
  18. ('馬刺',2005), 
  19. ('熱火',2006), 
  20. ('馬刺',2007), 
  21. ('凱爾特人',2008), 
  22. ('湖人',2009), 
  23. ('湖人',2010); 
  24.  
  25. SELECT RN=IDENTITY(INT),* INTO #a FROM #t ORDER BY TEAM,Y 
  26.  
  27.    SELECT a.TEAM, 
  28.    MIN(a.Y) B, 
  29.    MAX(a.Y) E 
  30.    FROM #a a 
  31.    WHERE EXISTS( 
  32.      SELECT 1 FROM #a 
  33.      WHERE TEAM=a.TEAM 
  34.      AND (Y=a.Y-1 OR a.Y=Y-1) 
  35.    ) 
  36.    GROUP BY a.TEAM,Y-RN 
  37.  
  38. DROP TABLE #t,#a 

解答的結果如下:

我們對上面的解法進行解讀一下:

首先是給這些數據添加一列自增長的RN列并插入到新的臨時表#a并且對TEAM和Y排序。

其次是將#a進行自匹配,匹配的條件是TEAM名稱相同(TEAM=a.TEAM),并且年份Y與前后的年份進行匹配(Y=a.Y-1 OR a.Y=Y-1)。

這個匹配是精妙地方之一,這樣就可以判定該球隊前后幾年的年份是否連續的。

如果球隊名相同的前提下,年份連續,就滿足這個條件;

如果年份連續,但是球隊名不相同,就不滿足這個條件了。

最后在進行分組的時候,不僅對球隊TEAM進行了分組,而且還對Y-RN進行了分組。為什么要對Y-RN進行分組呢?

如果去掉這個條件,我們發現如下情形:

公牛和湖人中間間隔了幾年才重新連續奪冠,但是這里因為沒有對Y-RN進行分組,導致這個球隊和奪冠年份在進行匹配時都滿足了。因為#a表中的內容實際上是這樣的,

 

Y=a.Y-1 OR a.Y=Y-1只要有一個滿足即可判斷是連續的年份,實際上經過我們處理后確實滿足上述條件,所以需要加上Y-RN進行第二次分組來判斷中間是否有間隔的年份。因為如果有間隔,那么Y-RN就不是同一個值了。

 

責任編輯:武曉燕 來源: SQL數據庫開發
相關推薦

2023-11-02 08:38:49

遞歸SQL用法

2021-04-06 11:50:30

SQL數據統計

2021-11-03 16:00:40

SQL流量序號

2021-01-05 08:12:42

SQL日期Spt

2010-06-11 13:05:41

openSUSE視頻

2010-06-11 09:13:20

openSUSE 網卡

2010-06-09 13:03:00

Opensuse分區

2010-06-11 16:33:21

openSUSE fl

2011-05-17 13:22:50

SQL對象名無效

2010-09-26 17:14:23

SQL查詢

2009-04-23 09:11:49

職場IT人求職

2018-09-20 11:54:31

數據庫MySQL性能優化

2011-12-19 14:22:36

云計算虛擬化

2010-09-24 15:46:23

SQL查詢

2011-04-25 14:51:24

2017-07-26 21:54:59

2017-05-22 15:23:46

PUE監測數據中心

2021-04-09 10:37:40

SQL Server數據庫排名

2021-11-09 06:55:03

SQLServer排序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: a在线免费观看视频 | 久艹av | 欧美日韩专区 | 日韩专区中文字幕 | 在线视频日韩 | 日韩欧美在线观看一区 | 黄色大片在线 | 成人免费视频网站在线看 | 亚洲精品日本 | 麻豆亚洲 | 欧美啪啪 | 亚洲一区二区视频 | 久久夜色精品国产 | 韩日三级| 另类视频区| 99久久精品免费看国产高清 | 亚洲高清在线视频 | 国产一区二区精品在线观看 | 91精品久久| h在线免费观看 | 亚洲精品一区二区 | 91在线电影 | 精品视频一区二区三区在线观看 | 九九导航 | 国产精品区一区二区三区 | 欧美亚洲一区二区三区 | 欧美激情第一区 | 久久激情视频 | 亚洲欧美中文日韩在线v日本 | 一区二区免费看 | 在线免费亚洲视频 | 99久热在线精品视频观看 | 国产精品特级片 | 男女羞羞视频在线观看 | 国产乱码精品一区二区三区忘忧草 | 久久69精品久久久久久久电影好 | 久久福利 | 中文字幕国产 | 热久久免费视频 | 翔田千里一区二区 | 国产精品久久久久久久7电影 |