2013-02-12 31 views
1

我需要查詢數據爲inviteid based。對於每個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

您是否嘗試從子查詢BY invteid,IDdesc,ID'取出'順序? (我懷疑這會不會影響到查詢太多的速度,但它似乎是不必要的。)另外,你可以給我們上表中的記錄數的一些想法,由查詢返回的記錄數,當前執行時間和期望的執行時間? – 2013-02-12 08:15:28

回答

1

我不知道我完全瞭解你的要求,但據我可以告訴派生表的group by是沒有必要的(就像order 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;