SQL从DB获取X个帐户,可以是可变行数

fin*_*ook 5 sql sql-server stored-procedures

我有一个AccountAction非规范化的SQL Server表.它是AccountAction表格的扁平化版本,我希望它能够更快地报告数百万行的查询.一个Account可以有很多Actions,所以表看起来类似于:

Account     Action
account1    action1
account1    action2
account1    action10
account2    action5
Run Code Online (Sandbox Code Playgroud)

但是,我在一个简单的存储过程中获取有限子集的信息时遇到了一些麻烦.

select Account, Action
from AccountAction
where ???
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是获得第一个X帐户,以及他们所有的行动.所以这将是一个动态的行数.因此,如果我传入1,使用上面的示例表,我会得到3行(即给我第一个帐户的所有行).

(我不介意帐户名称将在每一行 - 它在其他地方转动)

我是否需要使用ROWNUM或类似的来限制行?我相信这一定是一个比我到目前为止发现的更简单的问题.

编辑

使用TOP的答案将不起作用,在示例中,如果我说"给我一个(第一个)帐户",我会想要返回3行.但我怎么知道会有3个?它充满活力.它们也可能不是顺序的,如果account1的action99在结果中的位置为5500万.

Mat*_*lie 4

WITH
  SequencedData
AS
(
  SELECT
    DENSE_RANK() OVER (ORDER BY Account) AS account_sequence_id,
    *
  FROM
    AccountAction
)
SELECT
  *
FROM
  SequenceData
WHERE
  account_sequence_id = ???
Run Code Online (Sandbox Code Playgroud)

或者,对于倍数...

WHERE
  account_sequence_id BETWEEN 3 AND 5    -- For the 3rd, 4th and 5th accounts.
Run Code Online (Sandbox Code Playgroud)