如何使用Teradata中的Qualife语句排除记录
我必须使用合格声明为只有一个产品关联ABC的人创建人口 例如,我有数据如何使用Teradata中的Qualife语句排除记录,teradata,qualifiers,Teradata,Qualifiers,我必须使用合格声明为只有一个产品关联ABC的人创建人口 例如,我有数据 Id Code Prod Date 101 202 ABC 2017-05-31 101 203 DEF 2017-04-30 102 302 ABC 2018-06-30 从上面的数据中,我需要Id=102的数据,因为这个Id只有一个prod关系,其中as Id 101既有ABC,也有DEF,应该排除它们 我尝试了以下方法 Select id,prod from table1 Qu
Id Code Prod Date
101 202 ABC 2017-05-31
101 203 DEF 2017-04-30
102 302 ABC 2018-06-30
从上面的数据中,我需要Id=102的数据,因为这个Id只有一个prod关系,其中as Id 101既有ABC,也有DEF,应该排除它们
我尝试了以下方法
Select id,prod from table1
Qualify row_number() over (partition by id order by Date)=1
Where prod=‘ABC’
这样,我就得到了数据中我不想要的两条记录。感谢您的帮助。如果您想返回表中有一个prod值ABC的id,可以执行以下操作: 选择id,prod 从…起 选择id,prod 来自表1 按id分组,产品-获取唯一id,产品组合 按id=1限定COUNTprod超额分配-仅使用一个产品获取id src 其中prod='ABC'-仅使用ABC prod获取行 这里的关键是Teradata处理查询的顺序: 聚合-按分组 OLAP-COUNTprod结束 具有资格
您可以将WHERE prod='ABC'移动到QUALIFY子句中,并去掉外部选择,但不能100%确定。如果要返回表中有一个prod值ABC的id,可以执行以下操作: 选择id,prod 从…起 选择id,prod 来自表1 按id分组,产品-获取唯一id,产品组合 按id=1限定COUNTprod超额分配-仅使用一个产品获取id src 其中prod='ABC'-仅使用ABC prod获取行 这里的关键是Teradata处理查询的顺序: 聚合-按分组 OLAP-COUNTprod结束 具有资格
您可以将WHERE prod='ABC'移到QUALIFY子句中,并去掉外部SELECT,而不是100%确定。只需使用having,而不是QUALIFY。我看不出有什么必要装窗户。比如:
Select id,prod ,
count(prod)
from
table1
group by
id,
prod
having count(prod) = 1
用拥有代替资格。我看不出有什么必要装窗户。比如:
Select id,prod ,
count(prod)
from
table1
group by
id,
prod
having count(prod) = 1
MIN和MAX返回相同的值ABC,因此没有其他值
MIN和MAX都返回相同的值ABC,因此没有其他值此查询提供两行,因为在本例101和102中,WHERE首先应用,然后ROW_编号为每个唯一Id提供一行。请参阅下面的另一个选项。此查询将为您提供两行,因为在本例中,WHERE将首先应用,然后ROW_编号将为101和102中的每个唯一Id提供一行。另一个选项见下文。我阅读问题的方式是,用户只需要id有一个prod值,它必须是ABC,所以你需要在某个地方说明这一点。我认为Dieter的回答很好地解决了这个问题。按照我阅读问题的方式,用户只想要具有单个prod值的id,它必须是ABC,所以你需要在某个地方对此进行说明。我认为迪特的回答很好地解决了这个问题。