我有 2 個查詢結果表,其中包含不同評估的記錄。有 RAssessments 和 NASsessments 構成了完整的審查。
目的是最終確定完成了哪些審查。我想在 ID 和日期上加入兩個表格,但是每次評估完成的日期可能不相同,可能相隔數天,并且某些 ID 的 RAssessment 可能比 NASsessment 更多。
因此,我想在 ID 和 T1Date( 或 - 7 天)上加入 T1 到 T2。除了使用日期范圍之外,沒有其他方法可以匹配兩個表并對齊記錄,因為這是一個設計不佳的資料庫。我希望能對此有所幫助,因為我很困惑。
以下是一些示例資料:
表格1:
| ID | 評估日期 |
|---|---|
| 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 |
表#2:
| ID | 評估日期 |
|---|---|
| 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 |
我希望我的最終結果表如下所示:
| ID | 評估日期 | 評估日期 |
|---|---|---|
| 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 | 空值 | 2020-07-06 |
| 3 | 2022-07-21 | 2022-07-21 |
| 4 | 2020-06-30 | 空值 |
| 4 | 2020-12-30 | 2021-01-03 |
| 4 | 2021-06-30 | 2021-06-28 |
| 4 | 2021-12-30 | 2022-01-02 |
| 4 | 空值 | 2022-01-02 |
uj5u.com熱心網友回復:
嘗試這個:
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')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449600.html
標籤:sql sql服务器 tsql 加入 sql-日期函数
上一篇:如何通過多個連接按日期時間獲取最后一行的非分組資料?
下一篇:SQLServer資料冗余
