【问题标题】:Take last value in sequence按顺序取最后一个值
【发布时间】:2021-12-15 00:39:30
【问题描述】:

我正在尝试将数据从我的源表插入到我的目标表中,在目标表中我有一个名为 SaleTo 的附加列。

SaleTo = 基于 MAX SaleSequence 的 SaleFrom。

源表示例:

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

目标表示例:

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

我非常感谢任何帮助。

【问题讨论】:

  • SaleTo 在哪里?如果超过 1 个 SaleTo 有相同的 SaleSequence 是 MAX 怎么办?

标签: sql sql-server database azure-sql-database data-manipulation


【解决方案1】:

您可以使用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;

【讨论】:

    【解决方案2】:

    在这种情况下,另一种方法是使用 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;
    

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      相关资源
      最近更新 更多