Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅提取最新状态行_Sql_Sql Server - Fatal编程技术网

Sql 仅提取最新状态行

Sql 仅提取最新状态行,sql,sql-server,Sql,Sql Server,在我的表格中,我有三种输入的订单状态:Aw Appr和Completed。在AW Appr每周重复一次直到订单完成时,输入和完成的每一行。现在这三种状态都有了,但只有一次。AW Appr应为最新版本。我正在使用此查询,但它只提供最长月份和最长周数据。最新输入的完整数据的最大可用周数。请帮助增强查询以获取所有三个状态,并仅获取最新的AW Appr 源表 结果应为- 使用行号() 使用行号() 我们可以在这里尝试使用行编号来获得一个简单的解决方案: SELECT Contract_Number,

在我的表格中,我有三种输入的订单状态:Aw Appr和Completed。在AW Appr每周重复一次直到订单完成时,输入和完成的每一行。现在这三种状态都有了,但只有一次。AW Appr应为最新版本。我正在使用此查询,但它只提供最长月份和最长周数据。最新输入的完整数据的最大可用周数。请帮助增强查询以获取所有三个状态,并仅获取最新的AW Appr

源表

结果应为-

使用
行号()

使用
行号()


我们可以在这里尝试使用
行编号
来获得一个简单的解决方案:

SELECT Contract_Number, D_Monthx, D_Reporting_Week, D_Status
FROM
(
    SELECT D_Monthx, D_Reporting_Week, D_Status, Contract_Number,
        ROW_NUMBER() OVER (PARTITION BY Contract_Number, D_Status
                           ORDER BY D_Reporting_Week DESC) rn
    FROM yourTable
) t
WHERE rn = 1;


行号在这里工作得很好,因为对于
输入的
完成的
状态只会出现一次,这意味着它们的行号总是一个。类似地,我们要选择的最新
AW Appr
的行号也将是一个。

我们可以尝试在此处使用
行号来获得简单的解决方案:

SELECT Contract_Number, D_Monthx, D_Reporting_Week, D_Status
FROM
(
    SELECT D_Monthx, D_Reporting_Week, D_Status, Contract_Number,
        ROW_NUMBER() OVER (PARTITION BY Contract_Number, D_Status
                           ORDER BY D_Reporting_Week DESC) rn
    FROM yourTable
) t
WHERE rn = 1;

行号在这里工作得很好,因为对于
输入的
完成的
状态只会出现一次,这意味着它们的行号总是一个。类似地,我们要选择的最新
AW Appr
的行号也将是一

SELECT Contract_Number, D_Monthx, D_Reporting_Week, D_Status
FROM
(
    SELECT D_Monthx, D_Reporting_Week, D_Status, Contract_Number,
        ROW_NUMBER() OVER (PARTITION BY Contract_Number, D_Status
                           ORDER BY D_Reporting_Week DESC) rn
    FROM yourTable
) t
WHERE rn = 1;