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



我在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世界相对陌生。另外,如果我能进一步澄清什么,请告诉我。

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

相关内容

最新更新