• SQL查询连续年份


    有这样一个问题,给出一个表格记录了夺冠球队的名称和年份,我们要做的就是写出一条SQL语句,查询再次期间连续夺冠的有哪些,起止时间是什么

    下边是代码

    create table #t(TEAM vaarchar(20), Y int)
    insert #t(TEAM,Y) VALUES
    ('活塞',1990),
    ('公牛',1991),
    ('公牛',1992),
    ('公牛',1993),
    ('火箭',1994),
    ('火箭',1995),
    ('公牛',1996),
    ('公牛',1997),
    ('公牛',1998),
    ('马刺',1999),
    ('湖人',2000),
    ('湖人',2001),
    ('湖人',2002),
    ('马刺',2003),
    ('活塞',2004),
    ('马刺',2005),
    ('热火',2006),
    ('马刺',2007),
    ('凯尔特人',2008),
    ('湖人',2009),
    ('湖人',2010);


    SELECT RN=IDENTITY(INT),* INTO #a FROM #t ORDER BY TEAM,Y
    SELECT a.TEAM,
    MIN(a.Y) B,
    MAX(a.Y) E,
    FROM #a a
    WHERE EXISTS(
    SELECT 1 FROM #a
    WHERE TEAM=a.TEAM
    AND (Y=a.Y-1 OR a.Y=Y-1)
    )
    GROUP BY a.TEAM,Y-RN

    DROP TABLE #t,#a

    那现在做些解释

     1、给这些数据添加一列自增长的RN列并插入到新的临时表#a并且对TEAM和Y排序

     2、将#a进行自匹配,匹配的条件是TEAM名称形同(TEAM=a.TEAM),并且年份Y与前后的年份进行匹配(Y=a.Y-1 OR a.Y=Y-1)

     3、最关键的就是这个匹配的规则,在球队名相同的前提下,年份连续才满足条件

     4、在最后不仅对球队TEAM进行了分组,还对Y-RN进行分组,如果年份有间隔,那么Y-RN就不是同一个值

  • 相关阅读:
    MySQL-基础知识整理
    设计模式-适配器模式
    MySQL
    MySQL-5.7 填坑
    MySQL
    Oracle
    SQL 注入
    Apache JMeter
    AppScan
    DNS 搜索
  • 原文地址:https://www.cnblogs.com/john4415/p/11344618.html
Copyright © 2020-2023  润新知