2013-08-07 66 views
0

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

我使用SQL Server 2008中到目前为止,我的选择看起来是这样的:

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等级= 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 
+0

它呢?这真是个好消息。谢谢。 – Robinson