现在有个招聘表,表里有招聘公司名称、招聘的职位、招聘时间等。
每个公司发了个招聘信息就会在这个表新添加一条记录。
比如:
id   name      job     num     time
1  牛牛公司   技术员   2名   2006-7-8
2  啊里公司   业务员   1名   2006-7-7
3  牛牛公司   服务压   1名   2006-7-7
4  长江公司   设计员   3名   2006-7-71现在我要从这个招聘表里选出前10名的公司名称、id号,
2要求选出来的公司名称不能重复,按时间排序。
并且把相同公司的的job合并到一起
例如查询top 4的结果为:1  牛牛公司   技术员,服务压   2名   2006-7-8
2  啊里公司   业务员   1名   2006-7-7
3  长江公司   设计员   3名   2006-7-7
这是以前的,但是没有达到第二条要求,希望哪位大哥解决一下,谢谢```
           
paoluo 一天到晚游泳的鱼   信誉: 100 2006-7-31 11:44:25 得分:  20 
 
                  
Select TOP 10 A.*
From 招聘表 A
Inner Join (Select name,Max([time]) As [time] From 招聘表 Group By name) B
On A.name=B.name And A.[time] =B.[time] 
Order By A.[time]  Desc
                 
Top  
paoluo 一天到晚游泳的鱼   信誉: 100 2006-7-31 11:45:46 得分:  20 
 
                  OrSelect TOP 10 A.*
From 招聘表 A
Where [time] =(Select Max([time]) From 招聘表 Where name=A.name)
Order By A.[time] Desc
                 
Top  
paoluo 一天到晚游泳的鱼   信誉: 100 2006-7-31 11:46:48 得分:  20 
 
                  OrSelect TOP 10 A.*
From 招聘表 A
Where Not Exists (Select name From 招聘表 Where name=A.name And [time]>A.[time])
Order By A.[time] Desc
                 
 

解决方案 »

  1.   

    --job合并函数
    create function fn_job合并(@name varchar(30))
    returns varchar(100)
    as
    begin
       declare @r varchar(100)
       set @r=''
       select @r=@r+','+rtrim(job) from 招聘表 where name=@name order by time desc
       if @r<>''
          set @r=stuff(@r,1,1,'')
       return @r
    end
    go--查询
    Select TOP 10 A.id,a.name,dbo.fn_job合并(a.name) as job,a.num,a.time
    From 招聘表 A
    Inner Join (Select name,Max([time]) As [time] From 招聘表 Group By name) B
    On A.name=B.name And A.[time] =B.[time] 
    Order By A.[time]  Desc
      

  2.   

    create table T(id int, name varchar(10), job varchar(10), num int, [time] datetime)
    insert T select 1,  '牛牛公司',   '技术员',   2,   '2006-7-8'
    union all select 2,  '啊里公司',   '业务员',   1,   '2006-7-7'
    union all select 3,  '牛牛公司',   '服务压',   1,   '2006-7-7'
    union all select 4,  '长江公司',   '设计员',   3,   '2006-7-7'create function fun(@name varchar(10))
    returns varchar(200)
    as
    begin
    declare @re varchar(200)
    set @re=''
    select @re=@re+','+job from T where name=@name order by [time] desc return(stuff(@re, 1, 1, '')) 
    endset rowcount 10
    select name, job=dbo.fun(name), [time]=max([time])
    from T
    group by name
    order by 3 desc
    set rowcount 0--result
    name       job                                                                                                                                                                                                      time                                       
    ---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    牛牛公司       技术员,服务压                                                                                                                                                                                         2006-07-08 00:00:00.000
    啊里公司       业务员                                                                                                                                                                                                      2006-07-07 00:00:00.000
    长江公司       设计员                                                                                                                                                                                                      2006-07-07 00:00:00.000(3 row(s) affected)