以下语句检索SQL Server中每个组中的前2条记录。它工作正常,但你可以看到它根本不能扩展。我的意思是,如果我想要检索前5或10个记录而不是2,那么你可以看到这个查询语句如何快速增长。
如何将此查询转换为返回相同记录的内容,但我可以快速更改它以返回每组中的前5或10条记录,而不仅仅是2? (即我想告诉它返回每组中的前5名,而不是按照以下格式要求5个联盟)
谢谢!
WITH tSub
as (SELECT CustomerID,
TransactionTypeID,
Max(EventDate) as EventDate,
Max(TransactionID) as TransactionID
FROM Transactions
WHERE ParentTransactionID is NULL
Group By CustomerID,
TransactionTypeID)
SELECT *
from tSub
UNION
SELECT t.CustomerID,
t.TransactionTypeID,
Max(t.EventDate) as EventDate,
Max(t.TransactionID) as TransactionID
FROM Transactions t
WHERE t.TransactionID NOT IN (SELECT tSub.TransactionID
FROM tSub)
and ParentTransactionID is NULL
Group By CustomerID,
TransactionTypeID
答案 0 :(得分:2)
使用分区依据来解决此类问题
select values from
(select values ROW_NUMBER() over (PARTITION by <GroupColumn> order by <OrderColumn>)
as rownum from YourTable) ut where ut.rownum<=5
这将按 EventDate列对您想要订购的列进行分区,然后选择具有rownum<=5
的条目。现在,您可以更改此值5
以获取每个组的最新n
条目。