我有一张包含以下数据的表格:
emp_id | emp_sal | emp_grp
1 5 HMCCR
1 10 HMCPR
1 20 HMCPR
1 30 HMCPR
1 40 HMCRR
2 40 HMCRR
2 50 HMCCR
我需要在Teradata中编写sql,我需要为每组emp_id找到min(emp_sal)。如果一行或多行emp_id有emp_grp =' HMCPR'然后只保留那些行并占用emp_sal的min。当没有行有emp_grp =' HMCPR'时,不要做任何事情。并从该组中取出emp_sal的min。
道歉,如果你感到困惑。基于以上条件,我的输出应如下所示:
emp_id | emp_sal | emp_grp
1 10 HMCPR
2 40 HMCRR
我尝试了以下查询,但它为每个组提供了min(emp_sal),因为我使用了emp_id,emp_grp
组sel
emp_id,
case when emp_grp='HMCPR' then min(emp_sal)
else min(emp_sal) end emp_sal, emp_grp
from db_wrk.emp_sin
group by emp_id, emp_grp
任何人都可以帮助我在teradata中获得预期的结果。
答案 0 :(得分:1)
您可以使用row_number
一些逻辑来使emp_grp HMCPR首先被排序(如果存在)。
select emp_id,emp_sal,emp_grp
from (
select e.*,
row_number() over(partition by emp_id
order by case when emp_grp = 'HMCPR' then 0 else 1 end,emp_sal) as rn
from db_wrk.emp_sin e
) t
where rn = 1