首页 > 解决方案 > 如何在 SQL 中使用 id 和最近的下一个日期连接两个表?

问题描述

考虑我有两张桌子

表 A:

ID    Date1      Value  
A   12/12/2019  0.75
B   01/01/2020  0.2
C   02/02/2020  0.6
D   03/03/2020  0.4
E   04/04/2020  0.8
F   05/05/2020  0.9

和表 B:

ID2 Date2   Value2
A   18/12/2019  0.9
B   06/02/2020  0.6
C   08/03/2020  0.5
A   04/04/2020  0.8
B   06/07/2020  0.7
E   07/08/2020  0.5

我想通过 ID 加入它们,但希望日期对齐,以便表 1 的记录与相同的 ID 和最近的未来日期(与 ID 相关联)链接。

我如何在 SQL 中以这种方式加入它们?

我希望它产生这样的结果:

// ID1  DATE1     VALUE1    ID2 DaTE2   VALUE 2
// A    12/12/2019  0.75    A   18/12/2019  0.9
// B    01/01/2020  0.2     B    06/02/2020 0.6
// C    02/02/2020  0.6     C   08/03/2020  0.5
// D    03/03/2020  0.4     NULL    NULL    NULL
// E    04/04/2020  0.8     E   07/08/2020  0.5
//  F   05/05/2020  0.9     NULL    NULL    NULL

标签: mysqlsqldatabase

解决方案


您可以通过首先使用 aCommon Table Expression来聚合 TableA 中每个 ID 的最早日期,然后在 CTE 上执行简单的 SELECT 来实现此目的。

;WITH CTE AS (
SELECT a.ID, min(b.Date2) AS EarliestFutureData
  FROM TableA a
  JOIN TableB b ON a.ID = b.ID2
 WHERE b.Date2 > getdate()
 GROUP
    BY a.ID
)
SELECT * FROM CTE

推荐阅读