我的数据库设计的是以3个字段为主键的 分别是 原材料名,日期,公司名称   我想按 原材料,公司名称分组,日期 这个顺序分组 分组后的结果取 同一个原材料组下的不同公司的最后一个日期,请问一下这个SQL语句改怎么写呢?
例如:
原材料名      公司名    日期
AAAA            aaa     2009-11-1
AAAA            aaa     2009-11-2
AAAA            bbb     2009-11-12
AAAA            bbb     2009-11-10所要结果为:AAA            aaa     2009-11-2
AAA            bbb     2009-11-12

解决方案 »

  1.   

    select 原材料名,公司名,max(日期) as 日期 from tb group by 原材料名,公司名
      

  2.   

    -- =============================================
    -- Author:      T.O.P
    -- Create date: 2009/11/25
    -- Version:     SQL SERVER 2005
    -- =============================================
    declare @TB table([原材料名] varchar(4),[公司名] varchar(3),[日期] datetime)
    insert @TB
    select 'AAAA','aaa','2009-11-1' union all
    select 'AAAA','aaa','2009-11-2' union all
    select 'AAAA','bbb','2009-11-12' union all
    select 'AAAA','bbb','2009-11-10'select * 
    from @TB t
    where not exists(select 1 from @tb where t.[原材料名] = [原材料名] and t.[公司名] = [公司名] and t.[日期]<[日期])
    --测试结果:
    /*
    原材料名 公司名  日期
    ---- ---- -----------------------
    AAAA aaa  2009-11-02 00:00:00.000
    AAAA bbb  2009-11-12 00:00:00.000(2 row(s) affected)*/
      

  3.   

    select * from tb t
    where not exists(select 1 from tb where 原材料名 =t.原材料名  and 公司名=t.公司名
    and 日期>t.日期)
      

  4.   

    select * from tb t where 日期=(select max(日期) from tb where 原材料名 =t.原材料名  and 公司名=t.公司名)
      

  5.   


    select  * from 表 a where 日期= (select max(日期) from 表 where 原材料名=a.原材料名 )
      

  6.   

    谢谢  Happy_Stone 经过测试你的答案为正确的,可是 最后那个 select 1 from tb where 原材料名 =t.原材料名  and 公司名=t.公司名
    那个1代表什么意思?我有点不太明白