我正在使用PostgreSQL。我被困在构建查询。如果任何优先级与案例匹配,我们如何通过优先考虑数据来搜索结果并丢弃其余数据?
按家庭分组
如果家庭中的一个人的承诺级别为“VOTER”,那么应该取出它而不是同一家庭中状态不同的其他人,例如“委托”,“REACHOUT”或“中性”
如果家庭中的一个人的承诺级别为“已提交”,那么应该提取它而不是其他人在同一家庭中,其状态不同,例如“REACHOUT”或“NEUTRAL”
此层次结构如“VOTER”,“COMMITTED”,“REACHOUT”,“NEUTRAL” 如果家庭中的所有人都具有相同的承诺级别,则应该获取该人员移动号码(如果不为空)。
其他被丢弃
包含数据的样本表
<xyView id="my.test.xy.chart.view">
<head>
<analysis id="org.eclipse.linuxtools.ust.random_chart" />
<label value="Random view" />
</head>
<entry path="Dummy">
<display type="constant" value="Value" />
<name type="self" />
</entry>
</xyView>
OUTPUT:预期结果
ID COMMITTED LEVEL MOBILE NUMBER FAMILY NUMBER
1 VOTER 234828288 1
2 COMMITED 262349911 1
3 COMMITED 924792922 2
4 REACHOUT 82639472 2
5 VOTER 79246826234 3
6 VOTER NULL 3
答案 0 :(得分:3)
您可以使用distinct on
:
select distinct on (family_number) t.*
from t
order by family_number,
(case when committed_level = 'Voter' then 1
when committed_level = 'COMMITTED' then 2
when committed_level = 'REACHOUT' then 3
when committed_level = 'Neutral' then 4
else 5
end),
(case when mobile_number is not null then 1 else 2 end);