Teradata / Window功能 - 合格

时间:2017-11-03 11:01:44

标签: sql teradata window-functions

我正在分析我的同事的代码。 找到了这个查询:

SELECT 
     client_id
from lib.applications
QUALIFY Row_Number() Over(PARTITION BY client_id ORDER BY closed) = 1
WHERE closed=0 and application_date > '2016-01-01'

逻辑上,查询应返回具有活动(未关闭)应用程序的客户端列表。 我无法理解,为什么他在这里使用QUALIFY etc..? 下面的请求更简单,并返回相同的内容:

SELECT 
     client_id
from lib.applications
WHERE closed=0 and application_date > '2016-01-01'

你有什么想法,为什么可以在这里使用QUALIFY?

1 个答案:

答案 0 :(得分:1)

QUALIFYclient_id返回一行。编写查询的更通俗的方式是:

SELECT DISTINCT client_id
FROM lib.applications
WHERE closed = 0 and application_date > '2016-01-01';

也许查询的作者检查了性能并发现QUALIFY在这种情况下更快(尽管我会怀疑)。也许作者想要包括其他专栏,在这种情况下SELECT DISTINCT将不起作用。