按顺序取最后一个值
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;
我正在尝试将数据从源 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;