Sql 选择每组的5条最新记录
下面的语句检索SQL Server中每个组中的前2条记录。它工作正常,但正如您所看到的,它根本不可缩放。我的意思是,如果我想检索前5或前10条记录,而不是仅仅检索2条记录,那么您可以看到这个查询语句将如何快速增长 如何将此查询转换为返回相同记录的内容,但我可以快速将其更改为返回每个组中的前5或前10条记录,而不是仅返回2条记录?i、 e.我只想告诉它返回每个组中的前5名,而不是按照下面的格式要求有5个工会 谢谢Sql 选择每组的5条最新记录,sql,sql-server,tsql,common-table-expression,Sql,Sql Server,Tsql,Common Table Expression,下面的语句检索SQL Server中每个组中的前2条记录。它工作正常,但正如您所看到的,它根本不可缩放。我的意思是,如果我想检索前5或前10条记录,而不是仅仅检索2条记录,那么您可以看到这个查询语句将如何快速增长 如何将此查询转换为返回相同记录的内容,但我可以快速将其更改为返回每个组中的前5或前10条记录,而不是仅返回2条记录?i、 e.我只想告诉它返回每个组中的前5名,而不是按照下面的格式要求有5个工会 谢谢 WITH tSub as (SELECT CustomerID,
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
使用分区方式来解决此类型的问题
select values from
(select values ROW_NUMBER() over (PARTITION by <GroupColumn> order by <OrderColumn>)
as rownum from YourTable) ut where ut.rownum<=5
这将在您想要的列上按事件日期顺序对结果进行分区,然后选择包含rownumYOu应该查看关键字Rankt的条目通过按顺序分区查看窗口函数谢谢!他们确实提供了帮助,加上下面@Learning的答案,我终于完成了。很好,太好了!当MarkMonforti和@Evgeni在我最初的问题中提到Rank和Over作为注释时,我已经实现了它,但不确定如何将Rank作为where子句的一部分。你的回答澄清了这一点。谢谢