如何使用CTE获取最后5行?

Ram*_*nna 2 sql-server

我在使用CTE时遇到了问题.

WITH CTE AS 
(
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY #TEMPTABLE.Id order by #TEMPTABLE.Id) AS 'RowNo',
        #TEMPTABLE.Id,
        #TEMPTABLE.UserId,
        #TEMPTABLE.Code,
        #TEMPTABLE.CodeDesc
    FROM #TEMPTABLE
)
SELECT DISTINCT Id, UserId,Code,CodeDesc          
FROM CTE
where RowNo <=5
Run Code Online (Sandbox Code Playgroud)

从这个查询,我想得到最后5行.但我总是得到前5行.请给我一个解决方案.

Sta*_*vas 5

添加descending(DESC)order to ROW_NUMBER's ORDER BY子句,默认情况下是升序(ASC),这就是你获得前5行的原因,请尝试以下内容:

WITH CTE AS 
(
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY #TEMPTABLE.Id ORDER BY #TEMPTABLE.ActionId DESC) AS 'RowNo',
        #TEMPTABLE.Id,
        #TEMPTABLE.UserId,
        #TEMPTABLE.Code,
        #TEMPTABLE.CodeDesc
    FROM #TEMPTABLE
)
SELECT DISTINCT RowNo,Id, UserId,Code,CodeDesc          
FROM CTE
WHERE RowNo <=5
Run Code Online (Sandbox Code Playgroud)