1

我需要查询基于邀请ID的数据。对于每个被邀请人,我需要有前 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
4

1 回答 1

1

我不确定我是否完全理解您的要求,但据我所知group by,派生表中的 没有必要(order by正如 Mark 提到的那样),因为您使用的是窗口函数。

你可能想要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;
于 2013-02-12T10:57:49.787 回答