我需要查询基于inviteid的数据。对于每个inviteid,我需要拥有前5个ID和ID描述。
我看到我写的查询在全世界都在寻找。我没有注意到它的错误或任何错误。
代码是:
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
答案 0 :(得分:1)
我不确定我是否完全理解了您的要求,但据我所知,派生表中的group by
没有必要(正如Mark提到的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;