按顺序取最后一个值

Take last value in sequence

我正在尝试将数据从源 table 插入目标 table,在目标 table 中,我有一个名为 SaleTo[= 的附加列31=].

SaleTo = 基于 MAX SaleSequence 的 SaleFrom。

来源示例table:

SaleNo SaleFrom SaleSequence
1 Alabama 2
1 Minnesota 1
1 Virginia 3

目标示例 table:

SaleNo SaleFrom SaleSequence SaleTo
1 Alabama 2 Virginia
1 Minnesota 1 Virginia
1 Virginia 3 Virginia

我试过的一些代码:

SELECT DISTINCT a.SaleNo, 
                MAX(a.SaleSequence ) AS SaleSequence,
                b.SaleFrom
FROM SequenceOrderSource a
INNER JOIN SequenceOrderSource b
ON a.SaleNo= b.SaleNo
--WHERE B.SaleFrom IN (SELECT b.SaleFrom FROM SequenceOrderSource HAVING SaleSequence= MAX(SaleSequence))
GROUP BY a.SaleNo, b.SaleFrom

非常感谢任何帮助。

您可以使用last_value。默认范围是 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 因此您需要明确指定子句。

SELECT SaleNo, SaleSequence, SaleFrom,
   last_value(SaleFrom) over(partition by SaleNo order by SaleSequence RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) SaleTo
FROM SequenceOrderSource;

在这种情况下,另一种方法是使用 CROSS APPLY。像这样的代码:

SELECT SaleNo, SaleSequence, SaleFrom, OrderData.SaleFrom AS SaleTo
   CROSS APPLY (SELECT TOP 1 SaleFrom FROM SequenceOrderSource 
                ORDER BY SaleSequence DESC) OrderData
FROM SequenceOrderSource;