0

我有一个查询,它对“注释”记录进行分区和排名,按 ID_Task 对它们进行分组(用户为每个任务添加注释)。我想按日期对笔记进行排名,但我也想限制它,以便它们在两个日期之间排名。

我正在使用 SQL Server 2008。到目前为止,我的 SELECT 看起来像这样:

SELECT  Note.ID, 
        Note.ID_Task, 
        Note.[Days], 
        Note.[Date], 
        ROW_NUMBER() OVER (PARTITION BY ID_Task ORDER BY CAST([Date] AS DATE), Edited ASC) AS Rank
        FROM
        Note
        WHERE
        Note.Locked = 1 AND Note.Deleted = 0

现在,我假设如果我将 WHERE 子句放在底部,尽管它们仍然会有排名,但我可能会或可能不会获得排名为 1 的项目,因为它可能会被过滤掉。那么有没有办法我只能分区记录 WHERE ,而忽略所有其他记录?我猜我可以对子查询进行分区。

目的是使用排名号在另一个查询中查找每个任务的最新注释。所以在那个查询中,我将加入这个结果 WHERE rank = 1。

4

1 回答 1

3

row_number()之后 运行where。你总是会得到第 1 行。

例如:

declare @t table (id int)
insert @t values (3), (1), (4)
select  row_number() over (order by id)
from    @t
where   id > 1

这打印:

1
2
于 2013-08-07T11:48:15.940 回答