如何在此查询中使用 ROW_NUMBER?

How can use ROW_NUMBER in this query?

我是 SQL 服务器的新手,有一个这样的查询:

SELECT distinct top 10 ExecuteDate  
FROM [ClubEatc].[dbo].[GetOnlineBills]  
ORDER BY ExecuteDate  DESC 

我应该在该查询中使用 Row_Number,我该如何编写该查询?

谢谢大家。

如果您希望每一行都有一个数字并且 ExecuteDate 应该不同:

WITH CTE AS
(
   SELECT DISTINCT ExecuteDate  FROM [ClubEatc].[dbo].[GetOnlineBills]
)
SELECT TOP 10 ExecuteDate, RN = ROW_NUMBER() OVER (ORDER BY ExecuteDate   DESC)
FROM CTE
ORDER BY ExecuteDate  DESC

GROUP BY:

SELECT TOP 10 ExecuteDate, RN = ROW_NUMBER() OVER (ORDER BY ExecuteDate DESC)
FROM [ClubEatc].[dbo].[GetOnlineBills]
GROUP BY ExecuteDate
ORDER BY ExecuteDate DESC

也许您想查看整个记录,但只是每个 ExecuteDate-Group 的第一个。那么这个查询将起作用:

WITH CTE AS
(
    SELECT ExecuteDate, 
           RN_DESC = ROW_NUMBER() OVER (PARTITION BY ExecuteDate 
                                        ORDER BY ExecuteDate DESC)
    FROM [ClubEatc].[dbo].[GetOnlineBills]
)
SELECT TOP 10 ExecuteDate
FROM CTE
WHERE RN_DESC = 1
ORDER BY ExecuteDate DESC

您可以列出所有列,而不仅仅是 ExecuteDate 列。但是 ExecuteDate 是分组依据的列,您没有告诉我们您要使用哪一列来对每个组进行排序,因此您没有告诉我们您希望看到每个 ExecuteDate-group 的哪一行。所以目前这个查询 returns 每个组的任意行。将 PARTITION BY ExecuteDate ORDER BY ExecuteDate DESC 更改为 f.e。 PARTITION BY ExecuteDate ORDER BY AnotherDateOrIdColumn DESC 以获得更有意义的结果。

你的意思是这样的:

SELECT distinct  top 10 ROW_NUMBER() OVER(ORDER BY ExecuteDate DESC), ExecuteDate  
FROM [ClubEatc].[dbo].[GetOnlineBills]  
ORDER BY ExecuteDate  DESC

您可以使用:

SELECT TOP 10 ExecuteDate
FROM (
    SELECT  ExecuteDate,
            ROW_NUMBER() over (PARTITION BY ExecuteDate ORDER BY ExecuteDate DESC) as RN
    FROM [GetOnlineBills]  
) as t
WHERE RN = 1
ORDER BY ExecuteDate DESC

或者:

SELECT TOP 10 ExecuteDate
FROM (
    SELECT TOP 1 WITH TIES ExecuteDate 
    FROM [GetOnlineBills]  
    ORDER BY ROW_NUMBER() over (PARTITION BY ExecuteDate ORDER BY ExecuteDate DESC)
) as t
ORDER BY ExecuteDate DESC