您需要將數據劃分到每個帳戶的行組中。然後,您可以使用此分組數據檢索每個組中的前n個數據。這意味着你不必在每個選擇中指定帳戶ID。
下面是使用臨時表來保存一些示例數據一個例子:
CREATE TABLE [#bank]
(
bnk_id INT IDENTITY(1, 1) PRIMARY KEY NOT NULL,
bnk_acc_id INT NOT NULL,
bnk_date datetime NOT NULL
)
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES (1, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(1, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(1, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(1, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(1, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(1, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(2, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(2, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(2, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(2, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(2, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(2, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(3, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(3, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(3, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(3, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(3, getutcdate())
INSERT INTO [#bank] (bnk_acc_id, bnk_date) VALUES(3, getutcdate())
GO
WITH [Grouped] AS (
SELECT bnk_id
, bnk_acc_id
, bnk_date
, ROW_NUMBER()
OVER (
PARTITION BY [bnk_acc_id]
ORDER BY [bnk_date] DESC
) [RowInGroup]
FROM [#bank]
)
SELECT * FROM [Grouped]
WHERE [RowInGroup] <= 5
DROP TABLE [#bank]
主要部分是
WITH [Grouped] AS (
SELECT bnk_id
, bnk_acc_id
, bnk_date
, ROW_NUMBER()
OVER (
PARTITION BY [bnk_acc_id]
ORDER BY [bnk_date] DESC
) [RowInGroup]
FROM [#bank]
)
SELECT * FROM [Grouped]
WHERE [RowInGroup] <= 5
這將創建GROUPE數據,然後相應地過濾。
更多的Infor對分區在MSDN:
http://technet.microsoft.com/en-us/library/ms186734.aspx
對未來的答案:如果問題用'sql'標記,則答案應該是* standard * SQL。標籤'sql'是指*查詢語言*而不是特定的DBMS產品(而不是SQL Server)。 (我指的是使用'[..]引用標識符的非標準方式 - 公共表表達式和窗口函數**是**標準SQL) –