declare @t table(name varchar(10), type varchar(10),[group] varchar(10),date datetime)
insert @t select '张三',          '类型1'     ,   '组别1',          '2008-08-08' 
union all select '张三',          '类型2'    ,    '组别2' ,         '2008-08-10' 
union all select '张三',          '类型3'   ,     '组别3'  ,        '2008-08-28' 
union all select '王五',          '类型2'  ,      '组别2'   ,       '2008-08-18' 
union all select '王五',          '类型3' ,       '组别3'    ,      '2008-08-21' 
union all select '王五',          '类型4',        '组别4'     ,     '2008-08-23' SELECT CASE WHEN (RANK() OVER (PARTITION BY name order by date))=1 THEN name ELSE '' END name,type,[group],date FROM @t
[code=SQL]王五 类型2 组别2 2008-08-18 00:00:00.000
类型3 组别3 2008-08-21 00:00:00.000
类型4 组别4 2008-08-23 00:00:00.000
张三 类型1 组别1 2008-08-08 00:00:00.000
类型2 组别2 2008-08-10 00:00:00.000
类型3 组别3 2008-08-28 00:00:00.000
[/code]

解决方案 »

  1.   

    declare @t table(name varchar(10), type varchar(10),[group] varchar(10),date datetime)
    insert @t select '张三',          '类型1'     ,   '组别1',          '2008-08-08' 
    union all select '张三',          '类型2'    ,    '组别2' ,         '2008-08-10' 
    union all select '张三',          '类型3'   ,     '组别3'  ,        '2008-08-28' 
    union all select '王五',          '类型2'  ,      '组别2'   ,       '2008-08-18' 
    union all select '王五',          '类型3' ,       '组别3'    ,      '2008-08-21' 
    union all select '王五',          '类型4',        '组别4'     ,     '2008-08-23' SELECT CASE WHEN (RANK() OVER (PARTITION BY name order by date))=1 THEN name ELSE '' END name,type,[group],date FROM @t/*
    王五 类型2 组别2 2008-08-18 00:00:00.000
    类型3 组别3 2008-08-21 00:00:00.000
    类型4 组别4 2008-08-23 00:00:00.000
    张三 类型1 组别1 2008-08-08 00:00:00.000
    类型2 组别2 2008-08-10 00:00:00.000
    类型3 组别3 2008-08-28 00:00:00.000*/
      

  2.   

    declare @t table(name varchar(10), type varchar(10),[group] varchar(10),date datetime)
    insert @t select '张三',          '类型1'     ,   '组别1',          '2008-08-08' 
    union all select '张三',          '类型2'    ,    '组别2' ,         '2008-08-10' 
    union all select '张三',          '类型3'   ,     '组别3'  ,        '2008-08-28' 
    union all select '王五',          '类型2'  ,      '组别2'   ,       '2008-08-18' 
    union all select '王五',          '类型3' ,       '组别3'    ,      '2008-08-21' 
    union all select '王五',          '类型4',        '组别4'     ,     '2008-08-23' SELECT CASE WHEN (RANK() OVER (PARTITION BY name order by date))=1 THEN name ELSE '' END name,type,[group],date FROM @t/*
    王五 类型2 组别2 2008-08-18 00:00:00.000
    类型3 组别3 2008-08-21 00:00:00.000
    类型4 组别4 2008-08-23 00:00:00.000
    张三 类型1 组别1 2008-08-08 00:00:00.000
    类型2 组别2 2008-08-10 00:00:00.000
    类型3 组别3 2008-08-28 00:00:00.000*/
      

  3.   

    sql2000
    declare @t table(name varchar(10), type varchar(10),[group] varchar(10),date datetime)
    insert @t select '张三',          '类型1'     ,   '组别1',          '2008-08-08' 
    union all select '张三',          '类型2'    ,    '组别2' ,         '2008-08-10' 
    union all select '张三',          '类型3'   ,     '组别3'  ,        '2008-08-28' 
    union all select '王五',          '类型2'  ,      '组别2'   ,       '2008-08-18' 
    union all select '王五',          '类型3' ,       '组别3'    ,      '2008-08-21' 
    union all select '王五',          '类型4',        '组别4'     ,     '2008-08-23' SELECT CASE WHEN EXISTS(SELECT 1 FROM @t WHERE name=a.name AND date<a.date) THEN '' ELSE name END name,type,[group],date FROM @t a如果同name 的date有重复值,最好还是需要标识列。
      

  4.   


    declare @t table
    (
    [name] varchar(50),
    [type] varchar(50),
    [group] varchar(50),
    [date] datetime
    )
    insert into @t 
    select '张三','类型1','组别1','2008-08-08' union all 
    select '张三','类型2','组别2','2008-08-10' union all 
    select '张三','类型3','组别3','2008-08-28' union all 
    select '王五','类型2','组别2','2008-08-18' union all 
    select '王五','类型3','组别3','2008-08-21' union all 
    select '王五','类型4','组别4','2008-08-23' SELECT 
    CASE WHEN RANK() OVER (PARTITION BY [name] order by [type])=1 THEN [name] 
     ELSE '' 
     END [name],
    [type],
    [group],
    [date] 
    FROM @t
      

  5.   


    declare @t table
    (
    [name] varchar(50),
    [type] varchar(50),
    [group] varchar(50),
    [date] datetime
    )insert into @t 
    select '张三','类型1','组别1','2008-08-08' union all 
    select '张三','类型2','组别2','2008-08-10' union all 
    select '张三','类型3','组别3','2008-08-28' union all 
    select '王五','类型2','组别2','2008-08-18' union all 
    select '王五','类型3','组别3','2008-08-21' union all 
    select '王五','类型4','组别4','2008-08-23' SELECT 
    CASE WHEN (RANK() OVER (PARTITION BY [name] order by [type],[group],[date]))=1 THEN [name] 
     ELSE '' 
     END [name],
    [type],
    [group],
    [date] 
    FROM @t