tb1
Name Date
张三 2010/5/6
李四 2010/7/7
李四 2010/7/8
张三 2010/5/9
张三 2010/5/10查询结果
Flag Name Date
0 李四 2010/7/7
1 李四 2010/7/8
0 张三 2010/5/6
0 张三 2010/5/9
1 张三 2010/5/10

解决方案 »

  1.   

    select case when name = '李四' then 0 else 1 as Flag ,name , date from tb
      

  2.   

    select * from tb t
    where not exists(select 1 
    from tb
    where t.name=name
    and t.date<date)
      

  3.   

    这个有点毛病,问一下你的flag怎么的出来的
      

  4.   

    create table tb
    (
    name varchar(10),
    date datetime
    )
    insert into tb values('张三','2010/5/6')
    insert into tb values('李四','2010/7/7')
    insert into tb values('李四','2010/7/8')
    insert into tb values('张三','2010/5/9')
    insert into tb values('张三','2010/5/10')select * from tb t where
    not exists (select 1 from tb where name = t.name and date > t.date)
    /*
    name,date
    李四,2010-07-08 00:00:00.000
    张三,2010-05-10 00:00:00.000(2 行受影响) 
    还是这样?
      

  5.   

    想获得这样的查询结果,flag就是判断是否最新了,1表示最新的Flag Name Date
    0 李四 2010/7/7
    1 李四 2010/7/8
    0 张三 2010/5/6
    0 张三 2010/5/9
    1 张三 2010/5/10
      

  6.   

    create table tb
    (
        name varchar(10),
        date datetime
    )
    insert into tb values('张三','2010/5/6')
    insert into tb values('李四','2010/7/7')
    insert into tb values('李四','2010/7/8')
    insert into tb values('张三','2010/5/9')
    insert into tb values('张三','2010/5/10')select '0' as flag, * from tb t where
     exists (select 1 from tb where name = t.name and date > t.date)
    union
    select '1' as flag, * from tb t where
    not exists (select 1 from tb where name = t.name and date > t.date)
    order by name, date
    /*
    flag,name,date
    0,李四,2010-07-07 00:00:00.000
    1,李四,2010-07-08 00:00:00.000
    0,张三,2010-05-06 00:00:00.000
    0,张三,2010-05-09 00:00:00.000
    1,张三,2010-05-10 00:00:00.000(5 行受影响)
      

  7.   

    我写了下面这个语句可以出来,但是觉得复杂了点,不知道大侠们是否还有更好的方法
    select [Flag]=(case when [No] = (select max([No]) from (select row_number() over (partition by [Name] order by [Name],[Date]) as [No], * from tb1) as tb where [Name] = a.[Name]) then 1 else 0 end)
    ,[Name]
    ,[Date]
    from (select row_number() over (partition by [Name] order by [Name],[Date]) as [No], * from tb1) as a
      

  8.   

    declare  @tb table
    (
        name nvarchar(10),
        dt datetime
    )
    insert into @tb values(N'张三','2010/5/6')
    insert into @tb values(N'李四','2010/7/7')
    insert into @tb values(N'李四','2010/7/8')
    insert into @tb values(N'张三','2010/5/9')
    insert into @tb values(N'张三','2010/5/10')select name,max(dt) from @TB group by name
      

  9.   


    declare @tb table(name varchar(10),date1 datetime)
    insert into @tb values('张三','2010/5/6')
    insert into @tb values('李四','2010/7/7')
    insert into @tb values('李四','2010/7/8')
    insert into @tb values('张三','2010/5/9')
    insert into @tb values('张三','2010/5/10')
    select case when date1=(select MAX(date1) from @tb where name=a.name) then 1 else 0 end as flag,* from @tb as a order by a.name
    -----------------------------------------------------------
    flag        name       date1
    ----------- ---------- -----------------------
    0           李四         2010-07-07 00:00:00.000
    1           李四         2010-07-08 00:00:00.000
    0           张三         2010-05-09 00:00:00.000
    1           张三         2010-05-10 00:00:00.000
    0           张三         2010-05-06 00:00:00.000
      

  10.   


    select 
    case when not exists(select 1 from tb1 where t.name=name
    and t.date<date) then 1 else 0 end as Flag,
    t.[name],t,[date]
    from tb1 t
      

  11.   

    select case when date1=(select MAX(date1) from @tb where name=a.name) then 1 else 0 end as flag,* from @tb as a order by a.name,a.date1
      

  12.   

    大侠们的方法都不错,因为我数据量有几百万行,我发现chtzhking 的方法速度稍微快一点
      

  13.   


    select case when a.rowNum=1 then 1 else 0 end Flag,a.Name,a.Date
    (select Name,Date,ROW_NUMBER() OVER(partition by Name order by Date desc) AS rowNum from tb) a
      

  14.   

    select case when a.rowNum=1 then 1 else 0 end Flag,a.Name,a.Date from
    (select Name,Date,ROW_NUMBER() OVER(partition by Name order by Date desc) AS rowNum from tb) a
      

  15.   

    你把最后的order by 去掉看看效率
      

  16.   


    这个的效率高一点 可以在name和date1加索引