You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server查询:如何在去重结果中仅保留最新记录

解决SQL Server中按Filename保留最新记录的问题

我懂你的需求啦——现在你的查询会返回同一个文件的多条匹配记录,你希望每个文件只留下TransitionNr最大或者日期最新的那一条。首先得说清楚:DISTINCT在这里帮不上核心忙,因为它是对所有选中的列组合去重,只要其他列(比如状态日期、操作人)有差异,就会保留多条同文件名的记录。咱们用SQL Server的窗口函数ROW_NUMBER()就能精准解决这个“每组取Top1”的问题,这是处理这类场景最直观的方法。

修改后的查询语句(按日期最新筛选)

WITH RankedDocuments AS (
    SELECT 
        D.Filename, 
        S.Name AS State, 
        W.Name AS 'Workflow Name', 
        U.Username AS 'Name', 
        CONVERT(VARCHAR, TH.Date, 101) AS [Entered State], 
        DATEDIFF(dd, TH.Date, GETUTCDATE()) AS [Days In State],
        -- 按文件名分组,按状态进入日期倒序排名,最新的记录排第1
        ROW_NUMBER() OVER (PARTITION BY D.Filename ORDER BY TH.Date DESC) AS RecordRank
    FROM Status AS S 
    INNER JOIN Documents AS D ON D.CurrentStatusID = S.StatusID 
    INNER JOIN Workflows AS W ON W.WorkflowID = S.WorkflowID 
    INNER JOIN TransitionHistory AS TH ON D.DocumentID = TH.DocumentID AND D.LatestRevisionNo - 1 = TH.RevNr 
    INNER JOIN Users AS U ON U.UserID = TH.UserID 
    WHERE 
        d.Filename NOT LIKE '%test%' 
        AND d.filename NOT LIKE '%^%' 
        AND S.Name IN ('Initiated', 'Design Review', 'Change Pending Approval', 'Under Editing', 'Waiting for Approval', 'Under Change', 'ECO Design Review', 'Minor Change no Revision') 
        AND W.Name IN ('Production')
)
SELECT 
    Filename, 
    State, 
    [Workflow Name], 
    [Name], 
    [Entered State], 
    [Days In State]
FROM RankedDocuments
WHERE RecordRank = 1  -- 只保留每个文件排名第1的(最新的)记录
ORDER BY Filename;

如果要按TransitionNr最大筛选

只需要把窗口函数里的排序条件改成TransitionNr倒序就行,替换这一行:

ROW_NUMBER() OVER (PARTITION BY D.Filename ORDER BY TH.TransitionNr DESC) AS RecordRank

关键逻辑解释

  1. CTE(公共表表达式)RankedDocuments:先把所有符合原筛选条件的记录查出来,同时给每个Filename分组内的记录做排名——最新/最大的记录会被标记为RecordRank=1。
  2. PARTITION BY D.Filename:告诉SQL要按文件名分组,每个文件的记录单独计算排名。
  3. ORDER BY TH.Date DESC:在每个文件的分组里,按状态进入日期从新到旧排序,确保最新的记录排在第一位。
  4. 外层查询只取RecordRank=1的记录,就实现了每个文件只留一条最新数据的需求。

另外我帮你去掉了原语句IN子句末尾多余的逗号('Minor Change no Revision',),避免出现语法错误~

内容的提问来源于stack exchange,提问作者demarcjp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:44