sql语句为: select name,address,date from a
结果为:
name address date
张三 上海 2009-08-01
张三 北京 2008-08-03
李四 河南 2006-01-02
李四 河北 2007-05-02
如何更改上面的sql语句查询出结果为:
name address date
张三 北京 2008-08-03
李四 河北 2007-05-02
首先声明where条件中不允许加入时间段的限制

解决方案 »

  1.   

    搞错了查询结果应该为:
    name address date 
    张三 上海 2009-08-01
    李四 河北 2007-05-02 
      

  2.   


    select a.* from a
    join a b
    on a.name=b.name
    where a.date>b.date 
      

  3.   

    select name,address,date from a where not exists(select * from a where name=a.name and date>a.date)
      

  4.   


    declare  @t table([name] varchar(50), [address] varchar(50), [date] varchar(50) )
    insert into @t select '张三','上海','2009-08-01'
    union all select '张三','北京','2008-08-03'
    union all select '李四','河南','2006-01-02'
    union all select '李四','河北','2007-05-02'  select name,address,date from @t 
    name address date
    张三 上海 2009-08-01
    张三 北京 2008-08-03
    李四 河南 2006-01-02
    李四 河北 2007-05-02
    select name,address,date from @t  where date in(select MIN(date) from @t group by [name])name address date
    张三 北京 2008-08-03
    李四 河南 2006-01-02
      

  5.   

    select t1.name,t2address,t1.D1 as [date]
    from (select name,max([date]) D1 from a group by Name) t1
    inner join a t2 on t1.name=t2.name and t1.d1=t2.[date]
      

  6.   


    declare  @t table([name] varchar(50), [address] varchar(50), [date] varchar(50) )
    insert into @t select '张三','上海','2009-08-01'
    union all select '张三','北京','2008-08-03'
    union all select '李四','河南','2006-01-02'
    union all select '李四','河北','2007-05-02'  select name,address,date from @t name    address    date
    张三    上海    2009-08-01
    张三    北京    2008-08-03
    李四    河南    2006-01-02
    李四    河北    2007-05-02
    select name,address,date from @t  where date in(select max(date) from @t group by [name])name address date
    张三 上海 2009-08-01
    李四 河北 2007-05-02
      

  7.   


    declare @a table(name char(8), address  char(8),date datetime)
    insert into @a
    select '张三','上海','2009-08-01'  union all
    select '张三','北京','2008-08-03'  union all 
    select '李四','河南','2006-01-02'  union all 
    select '李四','河北','2007-05-02' 
    select a.* from @a a
    join @a b
    on a.name=b.name
    where a.date>b.date /*
    张三 上海     2009-08-01 00:00:00.000
    李四 河北     2007-05-02 00:00:00.000 */
      

  8.   

    select name,address,date from a  where date in(select MAX(date) from a group by [name])
      

  9.   

    select name,address,max(date) from a
    group by name,address
      

  10.   


    select [name],address,date from a  where date in(select MAX(date) from a group by [name])
      

  11.   


    这个做法有问题,当增加一列 张三的日期和李四的最大日期一样就会出问题
    select a.* from @t a
    join @t b
    on a.name=b.name
    where a.date>b.date 
    这个做法也不对,因为存在多条记录的时候只会去掉最小的记录
    select a.* from @t a
    join
    (select [name],MAX(date) as [date] from @t group by [name]) b
    on a.name=b.name where a.date=b.date这个应该是正确的做法,前提是name列加上date列是唯一的
      

  12.   

    SQL codedeclare@ttable([name]varchar(50),[address]varchar(50),[date]varchar(50) )insertinto@tselect'张三','上海','2009-08-01'unionallselect'张三','北京','2008-08-03'unionallselect'李四','河南','2006-01-02'unionallselect'李四','河北','2007-05-02'select name,address,datefrom@t
    name    address    date
    张三    上海2009-08-01
    张三    北京2008-08-03
    李四    河南2006-01-02
    李四    河北2007-05-02
    select name,address,datefrom@twhere datein(selectMIN(date)from@tgroupby[name])name    address    date
    张三    北京2008-08-03
    李四    河南2006-01-02这个做法有问题,当增加一列 张三的日期和李四的最大日期一样就会出问题
    select a.* from @t a
    join @t b
    on a.name=b.name
    where a.date>b.date
    这个做法也不对,因为存在多条记录的时候只会去掉最小的记录
    select a.* from @t a
    join
    (select [name],MAX(date) as [date] from @t group by [name]) b
    on a.name=b.name where a.date=b.date这个应该是正确的做法,前提是name列加上date列是唯一的
    [/Quote]