某个表,有如下字段:
企业编号,年,月,评分要求获得最新年月的所有企业的评分(最新那个)
也就是说,有2013和2012的数据就取2013的,有12月的和11月的就取12月的。
一个企业编号的数据只要一条,就是要最新的这条。

解决方案 »

  1.   

    select * from tb t where not exists (select 1 from tb where 企业编号=t.企业编号 and 年*100+月>t.年*100+t.月)
      

  2.   

    谁说我不在乎分的啊。SELECT  *
     FROM    tb a
     WHERE   EXISTS ( SELECT 1
                      FROM   ( SELECT    MAX(年) 年 ,
                                         MAX(月) 月 ,
                                         企业编号
                               FROM      tb
                               GROUP BY  企业编号
                             ) b
                      WHERE  a.月 = b.月
                             AND a.年 = b.年
                             AND a.企业编号 = b.企业编号 )
      

  3.   

    在乎分也要思维严密点吧,你这种方法应该用join才是正确的,exists是错误的,你认为呢版主大人?
      

  4.   

    为啥要join?单表查询没必要啊,把你的表结构和数据拿出来看看,我还幻想不出你的表和数据的样子。
      

  5.   

    另外,您的那个年,月,是什么数据类型?
    还有,您这个表就些列了吗,没有个ID什么的列么?
    还有,您的MSSQL是什么版本的?
    还有,您建的确这个查询语句是放在哪儿执行的?查询分析器?MSSQL Management Studio?
      

  6.   

    mssql 2005, 企业编号是整形。年是整形,月是整形,评分是 float
      

  7.   

    有ID,但我不想用 ORDER BY ID DESC ,因为有时候会填写上几个月的数据 
      

  8.   

    Vidor 的方案应该是可以的,我测试了几十次。都应该没问题的了。
      

  9.   

    如果一个月只有一个数据,如果这个月份和年份的数据类型是int 型的,则这样可能大概或许能满足您的要求:
    select * from tb a
    where not exists(select 1 from tb where 企业编号=a.企业编号 and convert(datetime,ltrim(年)+'-'+ltrim(月)+'-01')>convert(datetime,ltrim(a.年)+'-'+ltrim(a.月)+'-01'))
      

  10.   

    如果是2005,那
    create table 企业表(企业编号 int,年 int,月 int,评分 int)
    insert into 企业表
    select 1,2011,3,81 union all
    select 1,2012,6,82 union all
    select 1,2013,8,83 union all
    select 1,2012,12,84 union all
    select 1,2011,4,86 union all
    select 1,2015,7,87 union all
    select 1,2014,6,88 union all
    select 1,2013,2,89 union all
    select 1,2015,3,90 union all
    select 1,2012,9,91 union all
    select 1,2011,12,92 union all
    select 2,2014,6,88 union all
    select 2,2013,2,89 union all
    select 2,2015,3,90
    go
    select * from(
    select *,row_number()over(partition by 企业编号 order by 年 desc,月 desc) as rn from 企业表
    )t
    where rn=1  
    /*
    企业编号        年           月           评分          rn
    ----------- ----------- ----------- ----------- --------------------
    1           2015        7           87          1
    2           2015        3           90          1(2 行受影响)*/
    go
    drop table 企业表