使用计数和日期

Using Count and date

我遇到了问题,我需要 select 记录如下:

如果工作数量 "Plumbers" > 3(每户),return 只有 03 条记录,管道工按 "hire date" 排序。

如果每个 "House" 有超过 03 条记录,我需要 return 总是 03 条记录 JOb = Plumber ,按 "hire date" 排序,每个 "house" .

如果有 02 名 PLumbers,其他人是 "helpers",return 02 名 PLumbers + 最老的(根据雇用日期)助手。

如果没有管道工,return 助手(只有 03 位!)基于 "Hire Date",最老的优先。

所以这是一个数据样本:

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

这将 return 基于您的示例数据的正确结果:

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',每个日期都按升序分配。