2017-11-03 5 views
0

제 동료 코드를 분석하고 있습니다.Teradata/Window functions - QUALIFY

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' 

당신이 어떤 생각을 가지고 있습니까, 여기에 사용될 수있는 자격이 어떤 이유로?

+1

'qualify'는'client_id' 당 하나의 행을 반환하는 데 사용됩니다. –

답변

1

QUALIFYclient_id에 대해 한 행을 반환합니다. 쿼리를 작성하는 더 많은 구어체 방법은 다음과 같습니다

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

아마도 쿼리의 저자는 성능을 확인하고 (나는 그것을 의심 것이지만) QUALIFY 빨리이 경우 것으로 나타났습니다. 아마도 저자는 다른 열을 포함 할 생각이었습니다.이 경우 SELECT DISTINCT은 작동하지 않습니다.

+0

thx. 예를 들어 하나의 client_id에 대해 여러 개의 활성 (폐쇄 = 0) 응용 프로그램이 있고 client_id + application_id를 반환해야한다면 QUALIFY가 한 행을 선택하는 방법은 무엇입니까? –

+0

@GrigoryP. . . 그것은 각'client_id'에 대해 가장 오래된'closed' 값을 가진 행을 리턴합니다. –