如何正确查询特定用户指定日期后修改的Work Item列表?
如何查询特定用户在指定日期后修改过的工作项(Azure DevOps)
嘿,我完全懂你的困扰!之前那两种查询逻辑确实都没戳中你的真实需求:要么只显示最近一次修改是用户X的工作项(漏掉了用户X改过后别人又修改的项),要么把最近7天有任何变动但用户X早就改过的项也混进来了。别慌,咱们来搞定这个精准查询的问题!
先说说之前两种查询为啥不行
- 用
Changed by = user X AND changed date >= @today - 7:这个逻辑是要求最后一次修改必须是用户X,且这次修改在7天内。但如果用户X改完之后,其他人又对这个工作项做了修改,它就不会出现在结果里——这显然不是你要的。 - 用
Changed by WAS EVER user X AND changed date >= @today - 7:这个是只要用户X曾经改过(哪怕是一年前),且最近7天有任何人碰过这个工作项,就会被列出来。完全不符合“用户X在指定日期后修改过”的核心需求。
正确的解决方案:基于工作项历史记录的筛选
要实现“找出所有用户X在指定日期后有过修改操作的工作项”,我们需要直接查询工作项的修改历史,判断是否存在符合条件的修改记录。这里分两种方式实现:
方式1:使用WIQL(工作项查询语言)
如果你熟悉WIQL,可以直接用下面的查询语句,它会遍历每个工作项的历史记录,只要有一条是用户X在最近7天内的修改,就会把该工作项纳入结果:
SELECT [System.Id], [System.Title], [System.State], [System.ChangedDate], [System.ChangedBy] FROM WorkItems WHERE EXISTS ( SELECT * FROM WorkItemHistory WHERE [System.ChangedBy] = '用户X的邮箱/显示名' AND [System.ChangedDate] >= @today - 7 ) ORDER BY [System.ChangedDate] DESC
你可以把这段代码复制到Azure DevOps的“查询编辑器”→“导入WIQL”功能里直接使用,记得把用户X的邮箱/显示名替换成实际值。
方式2:使用可视化查询编辑器(不用写代码)
如果你更习惯图形化操作,按下面的步骤来:
- 打开Azure DevOps,新建一个平板查询,进入查询编辑器。
- 点击顶部的「选项」按钮,勾选「显示历史记录条件」(这一步是关键,默认不会显示历史相关的筛选选项)。
- 现在添加子句时,会出现「针对」下拉框,选择「历史记录」。
- 添加第一个历史记录条件:
Changed By= 用户X(直接从下拉框选或者输入名字)。 - 添加第二个历史记录条件:
Changed Date>=@today - 7(也可以手动输入具体日期,比如2024-05-01)。 - 确保这两个历史条件是在同一个组里,组的逻辑是「与(AND)」——这样就表示:工作项的历史中存在**同时满足“修改者是用户X”和“修改日期在指定范围内”**的记录。
这样设置后,查询结果就完全符合你的需求了:所有用户X在指定日期后有过修改操作的工作项,不管之后有没有其他人修改,也不会包含用户X很久以前修改但近期没变动的项。
内容的提问来源于stack exchange,提问作者Cogut
相关产品推荐
相关产品推荐

