zoukankan      html  css  js  c++  java
  • MS SQL 技巧系列(一)连续三年获得优秀奖的人 Virus

      本系列将收藏或者是转载MS SQL的一些技巧,包括查询或者是数据库设计、优化等。

      

      本文来源:求连续三年获得优秀奖的人

      

      原理就是从最小的年份开始,将连续三年(使用最小年份加1和加2实现)的表进行inner join on 年份=年份+1 and 年份=年份+2 and 姓名相同,然后再最后join出来的表中就是连续三年的数据了

      MSSQL如下

    代码
    Create table LastThreeYear
    (
     PKID 
    int  not null identity(1,1),
     TYear 
    int not null,
     TName 
    Nvarchar(20)
    )
    go
    insert into LastThreeYear(TYear,TName) values(  2005,'胡一刀' )
    insert into LastThreeYear(TYear,TName) values(  2006,'大刀王五' )
    insert into LastThreeYear(TYear,TName) values2007,'大刀王五')
    insert into LastThreeYear(TYear,TName) values(  2007,'胡一刀' )
    insert into LastThreeYear(TYear,TName) values(  2008,'大刀王五' )
    insert into LastThreeYear(TYear,TName) values(  2008,'胡一刀' )
    insert into LastThreeYear(TYear,TName) values(  2008,'令狐不冲' )
    insert into LastThreeYear(TYear,TName) values(  2009,'胡一刀' )
    insert into LastThreeYear(TYear,TName) values(  2009,'令狐不冲' )
    insert into LastThreeYear(TYear,TName) values(  2009,'大刀王五' )
    go
    select * from LastThreeYear where 1=1
    go
    select MIN(t.TYear) as MinYear,t.TName
    from LastThreeYear t 
    inner join LastThreeYear y on t.TYear+1=y.TYear and t.TName=y.TName 
    inner join LastThreeYear x on t.TYear+2=x.TYear and t.TName=x.TName
    where 1=1 
    group by t.TName
    go

     

     

      结果如下

      MinYear  TName


      2006     大刀王五
      2007     胡一刀

  • 相关阅读:
    gradle平级项目引用
    java使用ssh访问Linux的项目jscraft
    debian更新源时找不到公钥的解决办法
    debian系在线安装软件apt-get命令族
    vim打造开发IDE
    Mysql主从同步配置
    byte[] 转Hex String
    记录一次条件比较多的SQL查询语句
    LruCache的缓存策略
    LinkedHashMap的实现原理
  • 原文地址:https://www.cnblogs.com/virusswb/p/1670599.html
Copyright © 2011-2022 走看看