【发布时间】:2016-03-09 05:17:35
【问题描述】:
我正在对 TFS 数据库使用以下查询。有问题的工作项从活动状态变为其他状态并返回活动状态。我想使用 Rank() Over Partition 将两组“活动”状态视为单独的组,而不是将第二个活动组的编号继续与第一个活动组停止。
;with cte as
(
SELECT
dense_rank() over(partition by ID, State order by ID, Rev) as rn
, ID
, Rev
, State
, Reason
, NamePart
--, *
FROM dbo.WorkItemsWere Hist
Left JOIN Constants Cs WITH (nolock)
ON Hist.[Changed by] = Cs.ConstID
WHERE ID = 38728
)
SELECT *
FROM cte
--WHERE rn = 1
ORDER BY ID, Rev
下面是我得到的结果集,其中添加了一个额外的“Desired rn”列,以显示我想要的结果:
Desired rn rn ID Rev State
---------- ----- ----------- ----------- -----------------------------------
1 1 38728 1 Proposed
1 1 38728 2 Active
2 2 38728 3 Active
3 3 38728 4 Active
4 4 38728 5 Active
5 5 38728 6 Active
6 6 38728 7 Active
7 7 38728 8 Active
1 1 38728 9 Dev Complete
1 1 38728 10 Resolved; Queued for Build to Test
2 2 38728 11 Resolved; Queued for Build to Test
3 3 38728 12 Resolved; Queued for Build to Test
1 8 38728 13 Active
2 9 38728 14 Active
1 2 38728 15 Dev Complete
这可以通过调整语法来完成吗?
【问题讨论】:
标签: sql sql-server window-functions