我有一张表,里面有如下测试数据
declare @t table (recordId int identity(1,1) primary key,
  person varchar(10) null,
  date datetime null)
insert into @t values('001','2006-1-1')
insert into @t values('001','2006-1-2')
insert into @t values('002','2006-1-4')
insert into @t values('002',null)
insert into @t values('003','2006-1-10')
insert into @t values('004',null)现在我的需求是根据person去选一条记录,记录的要求是针对具体某一个person的
话,若是date中有存在null的记录,则直接把date为null的那条记录选出来,而不管
它们中是否还有其它记录;否则,选出该person对应的记录中date最大的那条记录如对001 则有 
person  maxdate
 002    2006-1-2如对002 则有 
person  maxdate
  002     null
对004 则有
person  maxdate
  004     null
要求用一条sql语句搞定,里面可以用子查询或其它方法等,只要是一条语句就行
请各位帮帮忙,谢谢!

解决方案 »

  1.   

    上面针对001的数据写错了,不好意思
    更正如下:
    如对001 则有
    person maxdate
    001   2006-1-2
      

  2.   

    Select * from @t a where exists(
     Select person from @t where person=a.person 
     group by person
     having max(isnull(date,'9999-12-31'))=isnull(a.date,'9999-12-31'))
      

  3.   

    Select person,maxdate=(case when max(isnull(date,'9999-12-31'))='9999-12-31'
                                then NULL else convert(varchar(10),max(Date),120) end)
     from @t group by person
      

  4.   

    谢谢 WangZWang(先来) 的帮忙
    结帖