我有一个查询对“注释”记录进行分区和排名,按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。
答案 0 :(得分: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