使用计数和日期
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',每个日期都按升序分配。
我遇到了问题,我需要 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',每个日期都按升序分配。