com_name      member_id     position      addDate
---------------------------------------------------
公司A        20069898        总监        2007-4-4
公司B        20069897        文员        2007-4-3
公司C        20069696        业务员      2007-5-5
公司A        20069898        技术员      2007-4-1
公司B        20069897        业务员      2007-5-6
公司A        20069898        管理员      2007-4-6
公司C        20069696        财务会计    2007-5-4我想查询出 :
每个公司只显示一次,而且相同类和不相同类均按addDate倒序排出来(按member_id来分辨不同公司名)
如我想得到的结果如下:
com_name     member_id     position     addDate
---------------------------------------------------
公司B        20069897       业务员      2007-5-6
公司C        20069696       业务员      2007-5-5
公司A        20069898       管理员      2007-4-6

解决方案 »

  1.   

    select * from [table] a where not exists(select 1 from [table] where member_id=a.member_id and adddate>a.adddate)
      

  2.   

    create table tb
    (
    com_name varchar(10),
    member_id  varchar(10),
    position varchar(10),
    addDate datetime
    )
    insert into tb 
    select '公司A','20069898','总监','2007-4-4' union all
    select '公司B','20069897','文员','2007-4-3' union all
    select '公司C','20069696','业务员','2007-5-5' union all  
    select '公司A','20069898','技术员','2007-4-1' union all
    select '公司B','20069897','业务员','2007-5-6' union all     
    select '公司A','20069898','管理员','2007-4-6' union all
    select '公司C','20069696','财务会计','2007-5-4'           
    goselect a.* from tb a inner join 
    (
    select com_name,member_id,max(addDate) addDate from tb group by com_name,member_id
    ) b
    on a.com_name=b.com_name and a.member_id=b.member_id and a.addDate=b.addDate
    order by addDate desc
    --
    com_name   member_id  position   addDate
    ---------- ---------- ---------- -----------------------
    公司B        20069897   业务员        2007-05-06 00:00:00.000
    公司C        20069696   业务员        2007-05-05 00:00:00.000
    公司A        20069898   管理员        2007-04-06 00:00:00.000(3 行受影响)
      

  3.   

    select com_name,member_id,position ,addDate 
    from [table] a 
    where not exists(select 1 from [table] where member_id=a.member_id and adddate>a.adddate)
    order by member_id
      

  4.   

    create table #temp
    (
    com_name varchar(10),
    member_id varchar(10),
    position varchar(10),
    addDate datetime
    )
    insert into #temp
    select '公司A','20069898','总监','2007-4-4' union all select '公司B','20069897','文员','2007-4-3' union all select '公司C','20069696','业务员','2007-5-5' union all select '公司A','20069898','技术员','2007-4-1' union all select '公司B','20069897','业务员','2007-5-6' union all select '公司A','20069898','管理员','2007-4-6' union all select '公司C','20069696','财务会计','2007-5-4'
    select * from #temp
    select com_name,member_id,position ,addDate 
    from [#temp] a 
    where not exists(select 1 from [#temp] where member_id=a.member_id and adddate>a.adddate)
    order by member_id------------
    公司C  20069696  业务员  2007-05-05 00:00:00.000
    公司B  20069897 业务员  2007-05-06 00:00:00.000
    公司A  20069898  管理员  2007-04-06 00:00:00.000
      

  5.   

    2楼的朋友,如果最大的addDate对应的记录有多条相同的呢????那都会输出来,如果是max (id)还可以显示出其中一条,但是不能按addDate倒序排了,有没有办法解决???