如何使用Teradata中的Qualife语句排除记录

如何使用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

我必须使用合格声明为只有一个产品关联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
 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,所以你需要在某个地方对此进行说明。我认为迪特的回答很好地解决了这个问题。