我遇到了需要选择记录的问题:
如果工作#"管道工" > 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
答案 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',每个都有升序日期。