fin*_*ook 5 sql sql-server stored-procedures
我有一个AccountAction非规范化的SQL Server表.它是Account和Action表格的扁平化版本,我希望它能够更快地报告数百万行的查询.一个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万.
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)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |