2016-09-12 4 views
0

마지막 값 기능을 사용하여 날짜순으로 정렬 된 일부 필드를 일부 기준에 맞게 반환하려고합니다. 그러나 Netezza는 나에게 마지막 가치 기능 내에서 주문하려는 필드가 그룹화되어야한다고 계속 말합니다. 문제는 다른 집계 함수와 함께 마지막 값을 사용하려고하지만 솔루션을 모른다는 것입니다.그룹화 된 Netezza 쿼리의 마지막 값 기능

CustomerID SumOfDollars LastWidget1 
1    400   Gadget3 
2    100   NULL 

내가 사용 쿼리는 다음과 같습니다 :이 결과 집합을 반환 할

CustomerID Type   Product  Dollars  Date 
1    Widget1  Gadget1  100   2016-09-01 
1    Widget2  Gadget2  100   2016-09-02 
1    Widget1  Gadget3  100   2016-09-03 
1    Widget2  Gadget2  100   2016-09-04 
2    Widget2  Gadget2  100   2016-09-01 

:

내가이 데이터가 말

SELECT 
    CustomerID 
    ,SUM(Dollars) AS SumOfDollars 
    ,LAST_VALUE(CASE WHEN Type = 'Widget1' THEN Product ELSE NULL END IGNORE NULLS) 
     OVER (ORDER BY Date DESC) AS LastWidget1 
FROM Table 
GROUP BY CustomerID 

내가 실행 이 쿼리는 Netezza가 Date가 그룹화되어 있어야한다는 것을 알려줍니다. 누구든지 솔루션을 통해 나를 도울 수 있습니까?

답변

1

LAST_VALUE()은 집계 함수가 아닌 분석 함수입니다. 하위 쿼리로 수행 할 수 있습니다.

SELECT CustomerID, SUM(Dollars) AS SumOfDollars, 
     MAX(LastWidget1) as LastWidget1 
FROM (SELECT t.*, 
      LAST_VALUE(CASE WHEN Type = 'Widget1' THEN Product ELSE NULL END IGNORE NULLS) 
       OVER (PARTITION BY CustomerID ORDER BY Date DESC) AS LastWidget1 
     FROM Table t 
    ) t 
GROUP BY CustomerID; 
관련 문제