SQL“over”分区两个值之间的日期

时间:2013-08-07 11:46:23

标签: sql partitioning

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

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