如何通过WIQL查询Azure DevOps指定日期范围内有变更的工作项
可以实现,你之前的查询没拿到预期结果,核心原因是System.ChangedDate字段本身存储的是工作项最后一次修改的时间戳,永远跟着最新编辑操作更新,直接在workitems主表上做时间范围筛选,天然只能匹配最后一次修改落在区间内的项,不可能覆盖区间内改过、之后又被编辑的工作项。
具体实现方法
方法1:直接用WIQL查询工作项修订表(原生支持,无需额外接口)
WIQL除了查询当前最新状态的工作项,还支持直接查询workitemrevisions修订表,这张表存了工作项每一次修改的版本快照,只要某一次修改的时间落在你指定的区间内,就会被命中,最后去重就能拿到完整的工作项列表。
对应查询语句如下:
SELECT DISTINCT [System.Id], [System.WorkItemType], [System.Title], [System.State], [System.AreaPath], [System.IterationPath] FROM workitemrevisions WHERE System.ChangedDate >= '2022-06-10' AND System.ChangedDate < '2022-06-11' AND System.RevisedDate != '9999-01-01 00:00:00'
需要注意两个细节:
- 必须加
DISTINCT关键字:同一个工作项如果在你选的时间范围内有多次修改,会在修订表里生成多条记录,去重后才是不重复的工作项列表 - 必须加
System.RevisedDate != '9999-01-01 00:00:00'筛选条件:修订表里每个工作项的最新版本会用这个时间作为占位值,不加这个条件会把所有最新修改时间晚于区间结束时间的工作项都错误带出来 - 这个查询返回的结果完全符合需求:不管工作项在你选的时间范围之后有没有被再次编辑,只要在区间内存在过任意变更,都会出现在结果里。
方法2:适配Boards界面查询/REST API场景
Azure DevOps网页端的可视化查询编辑器不支持直接选择workitemrevisions实体,如果你需要在界面上用或者做二次开发,可以走两步逻辑:
- 先拉取指定时间范围内的所有工作项更新记录,提取出去重后的工作项ID集合
- 再写普通的工作项查询,用
System.Id In (ID1, ID2, ID3...)的条件,拉取这些工作项的最新详情即可。
补充说明:不要尝试用
System.History字段做时间筛选,这个字段只存历史备注的文本内容,不记录变更时间,无法实现时间范围匹配。
内容的提问来源于stack exchange,提问作者Jamie Nicholls
相关产品推荐
相关产品推荐

