举个例子:共100家公司,每个公司发布了5条信息,共500条。要求搜索信息结果排序——  
先按照公司名排序,要求先列出不同公司发布时间最新的那条信息,也就是前100条肯定是不同公司发布的最新的那条。从第101条开始,按发布时间排序,也就是每个公司发布的其余4条(总400条)从第101开始按时间排。  求高手!

解决方案 »

  1.   

    select t.* , type = 0 from tb t where 时间字段 = (select max(时间字段) from tb where 公司名 = t.公司名)
    union all
    select m.* , type = 1 from tb m where not exists (select 1 from (select t.* , type = 0 from tb t where 时间字段 = (select max(时间字段) from tb where 公司名 = t.公司名)) n where n.公司名 = m.公司名 and n.时间字段 = m.时间字段)
    order by 
    type,
    (case type when 0 then 公司名 else null end),
    (case type when 1 then 时间字段 else null end)
      

  2.   

    create table tb (name varchar(10) , dt datetime , title varchar(10))
    insert into tb values('a' , '2008-01-01' , 'a1')
    insert into tb values('a' , '2008-01-02' , 'a2')
    insert into tb values('a' , '2008-01-03' , 'a3')
    insert into tb values('a' , '2008-01-04' , 'a4')
    insert into tb values('a' , '2008-01-05' , 'a5')
    insert into tb values('b' , '2008-01-06' , 'b1')
    insert into tb values('b' , '2008-01-07' , 'b2')
    insert into tb values('b' , '2008-01-08' , 'b3')
    insert into tb values('b' , '2008-01-09' , 'b4')
    insert into tb values('b' , '2008-01-10' , 'b5')
    goselect name , dt , title from
    (
    select t.* , type = 0 from tb t where dt = (select max(dt) from tb where name = t.name)
    union all
    select m.* , type = 1 from tb m where not exists (select 1 from (select t.* , type = 0 from tb t where dt = (select max(dt) from tb where name = t.name)) n where n.name = m.name and n.dt = m.dt)
    ) t
    order by type,
    (case type when 0 then name else null end),
    (case type when 1 then dt else null end)drop table tb/*
    name       dt                                                     title      
    ---------- ------------------------------------------------------ ---------- 
    a          2008-01-05 00:00:00.000                                a5
    b          2008-01-10 00:00:00.000                                b5
    a          2008-01-01 00:00:00.000                                a1
    a          2008-01-02 00:00:00.000                                a2
    a          2008-01-03 00:00:00.000                                a3
    a          2008-01-04 00:00:00.000                                a4
    b          2008-01-06 00:00:00.000                                b1
    b          2008-01-07 00:00:00.000                                b2
    b          2008-01-08 00:00:00.000                                b3
    b          2008-01-09 00:00:00.000                                b4(所影响的行数为 10 行)
    */