2013-02-12 1 views
1

inviteid 기반 데이터를 쿼리해야합니다. 각 inviteid에 대해 상위 5 개의 ID 및 ID 설명이 필요합니다.Netezza SQL에서 파생 쿼리를 작성하는 방법은 무엇입니까?

내가 작성한 쿼리는 세계에서 항상 가져 오는 쿼리라는 것을 알 수 있습니다. 내가 잘못했거나 잘못 된 것을 발견하지 못했습니다.

코드는 다음과 같습니다

SELECT count(distinct ID), 
    IDdesc, 
    inviteid, 
    A 
FROM (
    SELECT 
    ID, 
    IDdesc, 
    inviteid, 
    RANK() OVER(order by invtypeid asc) A 
    FROM Fact_s 
    --WHERE dateid ='26012013' 
    GROUP BY invteid,IDdesc,ID 
    ORDER BY invteid,IDdesc,ID 
) B 
WHERE A <=5 
GROUP BY A, IDDESC, inviteid 
ORDER BY A 
+1

당신이 하위 쿼리에서 invteid, IDdesc, ID'하여 'ORDER를 제거하는 시도? (나는 그것이 쿼리의 속도에 많은 영향을 미치지 않을 것이라고 생각하지만, 불필요한 것으로 보인다.) 또한, 테이블에있는 레코드의 수, 쿼리에서 반환 한 레코드의 수, current 실행 시간과 원하는 실행 시간? –

답변

1

I합니다 (order by 마크가 언급 한 것처럼 나는 완전히 당신의 요구 사항을 이해 모르겠지만, 지금까지의 내가 파생 테이블의 group by을 말할 수있는 필요가 없습니다) 윈도우 함수를 사용하기 때문입니다.

그리고 당신은 아마 row_number() 대신에 거기 rank()합니다.

외부 쿼리에 rank()의 결과를 포함시키는 것도 잘 모르겠습니다.

그래서이 다음과 같은 성명에 이르게 :

SELECT count(distinct ID), 
     IDdesc, 
     inviteid 
FROM (
    SELECT ID, 
     IDdesc, 
     inviteid, 
     row_number() OVER (order by invtypeid asc) as rn 
    FROM Fact_s 
) B 
WHERE rn <= 5 
GROUP BY IDDESC, inviteid;