首页 > 解决方案 > 仅提取最新的状态行

问题描述

我的表中有三个订单状态,分别为Entered、Aw Appr 和 CompletedEnteredCompleted各有一行,而AW Appr每周重复一次,直到订单完成。现在所有三种状态,但只有一次。AW Appr应该是最新的。我正在使用这个查询,但它只提供最大月份和最大周数据。它是最新条目的完整数据的最大可用周数。请帮助增强查询以获取所有三个状态和AW Appr仅最新的一个。

源表 http://sqlfiddle.com/#!18/67924/2

SELECT DISTINCT t1.Contract_Number
    ,t2.D_Monthx
    ,t2.D_Reporting_Week
    ,t2.D_Status
FROM Table1 t1
INNER JOIN (
    SELECT DISTINCT max(D_Monthx) D_Monthx
        ,Max(D_Reporting_Week) D_Reporting_Week
        ,D_Status
        ,Contract_Number
    FROM Table1
    GROUP BY Contract_Number
        ,D_Status
    ) t2 ON t1.Contract_Number = t2.Contract_Number
    AND t1.D_Monthx = t2.D_Monthx
WHERE t1.Contract_Number = '130100964/2'

结果应该是 -

在此处输入图像描述

标签: sqlsql-server

解决方案


使用Row_Number()

Select Contract_Number, D_Monthx, D_Reporting_Week, D_Status from 
(Select *, 
Row_Number() over 
    (partition by Contract_Number,D_Status order by D_Monthx desc) 
    as ranking 
from Table1)c
where ranking=1

SqlFiddle


推荐阅读