【问题标题】:Complicated Date Join: Need most recent date entry per group occurring before the date entry from another table复杂的日期连接:需要每个组的最近日期条目出现在另一个表的日期条目之前
【发布时间】:2020-11-17 03:19:30
【问题描述】:

我遇到了一个 SQL 连接,我似乎无法理解它的机制。首先,我有这两张桌子:

表 1:

ClientID | Date         | Value
---------|--------------|------
63       | 2019-10-04   | 77
63       | 2019-10-05   | 50
63       | 2019-10-06   | 70
63       | 2019-10-07   | 62
67       | 2019-10-04   | 64
67       | 2019-10-05   | 69
67       | 2019-10-06   | 66

表 2:

ClientID | Date         | Target
---------|--------------|------
63       | 2019-10-04   | 80
63       | 2019-10-06   | 55
67       | 2019-10-04   | 65
67       | 2019-10-07   | 70

基本上,我想将表 2 中每个客户的最新“目标”加入表 1 中的值。这样我可以跟踪当前目标和某个日期的值。这个示例的最终表格如下所示:

ClientID | Date         | Value | Target
---------|--------------|-------|--------
63       | 2019-10-04   | 77    |80
63       | 2019-10-05   | 50    |80
63       | 2019-10-06   | 70    |55
63       | 2019-10-07   | 62    |55
67       | 2019-10-04   | 64    |65
67       | 2019-10-05   | 69    |65
67       | 2019-10-06   | 66    |65

TIA 为您提供任何帮助,因为我对 SQL 世界还比较陌生。另外,如果我可以进一步澄清任何事情,请告诉我。

【问题讨论】:

    标签: sql sql-server date join merge


    【解决方案1】:

    您可以使用横向join

    select t1.*, t2.*
    from table1 t1 outer apply
         (select top (1) t2.*
          from table2 t2
          where t2.clientid = t1.clientid and t2.date <= t1.date
          order by t2.date desc
         ) t2;
    

    【讨论】:

    • 太棒了!感谢您的快速回答,当新的问题计时器用完时,我必须将其标记为正确(LOL)。我认为'top'命令是我在这里寻找的。我没想过将它用于最近的日期......我只用它来采样一张桌子。再次感谢!
    猜你喜欢
    • 2023-03-04
    • 2021-12-19
    • 2017-02-28
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2016-05-08
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多