复杂的日期联接:每个组需要在另一个表的日期项之前出现的最新日期项

bcs8qyzn  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(302)

我在sql中遇到了一个join,我似乎无法理解它的机制。首先,我有两张table:
表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中每个客户机最近的“target”与表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

谢谢你的帮助,因为我对sql还比较陌生。另外,请让我知道如果我可以进一步澄清什么。

qnyhuwrf

qnyhuwrf1#

你可以用侧边的 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;

相关问题