Вам необходимо разбить свои данные на группы строк для каждой учетной записи. Затем вы можете использовать эти сгруппированные данные для извлечения первого n из каждой группы. Это означает, что вам не нужно указывать идентификаторы учетных записей в каждом выборе.
Ниже приведен пример с использованием временной таблицы для хранения некоторых примеров для Вас данные:
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 данных, затем процедите его соответствующим образом.
Больше инфор на разбиении на MSDN:
http://technet.microsoft.com/en-us/library/ms186734.aspx
Для будущих ответов: если вопрос отмечен 'sql', то ответ должен быть * стандартным * SQL. Тег 'sql' ссылается на * язык запросов * не на конкретный продукт СУБД (а не на SQL Server). (Я имею в виду нестандартный способ цитирования идентификаторов с помощью '[..]' - Общее выражение таблицы и функции окна ** являются стандартными SQL) –