如何在 SQL 中以 ID 和 DATE RANGE 连接两个表

How can I join two tables on an ID and a DATE RANGE in SQL

我有 2 个查询结果 tables 包含不同评估的记录。有 RAssessments 和 NAssessments 组成一个完整的评论。

目的是最终确定完成了哪些审核。我想在 ID 和日期上加入两个 tables,但是每个评估完成的日期可能不相同,可能相隔几天,有些 ID 可能有更多的 RAssessment比 NAssessment.

因此,我想在 ID 和 T1Date(+ 或 - 7 天)加入 T1 到 T2。除了使用日期范围外,没有其他方法可以匹配两个 table 并对齐记录,因为这是一个设计不佳的数据库。我很困惑,希望得到一些帮助。

这是一些示例数据:

Table #1:

ID RAssessmentDate
1 2020-01-03
1 2020-03-03
1 2020-05-03
2 2020-01-09
2 2020-04-09
3 2022-07-21
4 2020-06-30
4 2020-12-30
4 2021-06-30
4 2021-12-30

Table #2:

ID NAssessmentDate
1 2020-01-07
1 2020-03-02
1 2020-05-03
2 2020-01-09
2 2020-07-06
2 2020-04-10
3 2022-07-21
4 2021-01-03
4 2021-06-28
4 2022-01-02
4 2022-06-26

我希望我的最终结果 table 看起来像这样:

ID RAssessmentDate NAssessmentDate
1 2020-01-03 2020-01-07
1 2020-03-03 2020-03-02
1 2020-05-03 2020-05-03
2 2020-01-09 2020-01-09
2 2020-04-09 2020-04-10
2 NULL 2020-07-06
3 2022-07-21 2022-07-21
4 2020-06-30 NULL
4 2020-12-30 2021-01-03
4 2021-06-30 2021-06-28
4 2021-12-30 2022-01-02
4 NULL 2022-01-02

试试这个:

SELECT 
    COALESCE(a.ID, b.ID) ID, 
    a.RAssessmentDate, 
    b.NAssessmentDate
FROM (
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) RowId, * 
    FROM table1
) a
FULL OUTER JOIN (
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) RowId, * 
    FROM table2
) b ON a.ID = b.ID AND a.RowId = b.RowId
WHERE (a.RAssessmentDate BETWEEN '2020-01-01' AND '2022-01-02') 
    OR (b.NAssessmentDate BETWEEN '2020-01-01' AND '2022-01-02')