【问题标题】:Highest Modify Date Among Multiple Tables多个表中的最高修改日期
【发布时间】:2020-05-13 15:27:07
【问题描述】:

我们在 ETL 期间经常遇到一个问题,我希望这里有人已经解决了这个问题。假设我们有三个层次表:标题、明细和事务。源系统可以更新其中任何一个中的记录,并且只会更新他们更改的表的最后修改日期。当我们运行 ETL 时,如果任何级别发生更改,我们需要提取所有标头及其所有详细信息和事务。

跨行,我们可以使用 max 函数,但对于列,有没有简单的方法来返回三个单独列的最高日期?我们可以使用嵌套的 case 语句来做到这一点,但是当您涉及 7 个以上的表时,这会变得很混乱。与数据库无关的方法会很棒,但我们使用的是 Azure / SQL Server。任何建议将不胜感激!

【问题讨论】:

  • 一些研究提出了以下似乎适用于 Azure 的解决方案。我们尚未测试性能,但它是迄今为止我们发现的最好的。我仍然欢迎有关替代方案或更好方法的任何建议:select A.Date1, A.Date2, A.Date3, (SELECT MAX(DateAlias) FROM (VALUES (A.Date1), (A.Date2), (A. Date3)) T (DateAlias)) AS LatestDate from TableName A;
  • 其实,仅仅从您的提问中,我们无法得到您真正想做的事情。表格数据是什么样的,你想要的输出数据是什么。我很高兴听到您找到了更好的解决方案。试试吧,你可以自己发布答案。

标签: sql-server azure-sql-database etl delta


【解决方案1】:

一些研究提出了以下似乎适用于 Azure 的解决方案。我们尚未测试性能,但它是迄今为止我们发现的最好的。我仍然欢迎有关替代方案或更好方法的任何建议:

select 
A.Date1, 
A.Date2, 
A.Date3, 
(SELECT MAX(DateAlias) FROM (VALUES (A.Date1), (A.Date2), (A.Date3)) T (DateAlias)) AS LatestDate 
from TableName A;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2019-07-25
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    相关资源
    最近更新 更多