使用计数和日期

时间:2015-05-15 18:45:45

标签: sql sql-server count group-by

我遇到了需要选择记录的问题:

如果工作#"管道工" > 3(每个房子),只返回03记录,管道工按照"雇用日期"。

如果每个" House"有超过03条记录,我需要返回ALWAYS 03记录,其中JOb = Plumber,订单按"雇用日期",每"房子"

如果有02个工具,其他人是"帮助",则返回02个工具+最老的(基于雇用日期)帮助。

如果没有管道工,请根据"雇用日期"返回帮助者(仅限03!)。 ,最早的。

所以这是一个数据样本:

House   Name    Job      hire date
Yellow  John    Plumber  1/1/15
Yellow  Mary    Plumber  1/2/15
Yellow  Kyle    Helper   1/10/15
Yellow  Vince   Helper   1/12/15
Blue    Mark    Plumber  1/1/15
Blue    Janet   Plumber  1/5/15
Blue    Joyce   Plumber  1/20/15
Blue    Jim     Plumber  1/4/15
Red     Jones   Plumber  1/8/15
Red     Joe     Helper   1/7/15
Red     Michael Helper   1/2/15
Red     Paul    Helper   1/15/15
Red     Bill    Helper   1/9/15

我需要看到的结果是:

Yellow  John    Plumber 1/1/15
Yellow  Mary    Plumber 1/2/15
Yellow  Kyle    Helper  1/10/15

Blue    Mark    Plumber 1/1/15
Blue    Jim     Plumber 1/4/15
Blue    Janet   Plumber 1/5/15

Red     Michael Helper  1/2/15
Red     Joe     Helper  1/7/15    
Red     Jones   Plumber 1/8/15

1 个答案:

答案 0 :(得分:0)

这将根据您的示例数据返回正确的结果:

select *
from 
 (
   select House, Name, Job, hire_date,
      row_number() 
      over (partition by House
            order by Job desc, hire_date) as rn
   from tab
 ) as dt
where rn <= 3

row_number首先根据'Plumbers'分配,然后是'Helpers',每个都有升序日期。