我有這兩個表需要并排連接
表A
| ID | 日期 |
|---|---|
| 1 | 03/01/2021 |
| 1 | 04/01/2021 |
| 1 | 05/01/2021 |
| 2 | 04/01/2021 |
| 2 | 05/01/2021 |
| 3 | 03/01/2021 |
| 3 | 04/01/2021 |
表B
| ID | 日期 |
|---|---|
| 1 | 03/01/2021 |
| 1 | 04/01/2021 |
| 1 | 05/01/2021 |
| 1 | 06/01/2021 |
| 2 | 04/02/2021 |
| 2 | 05/02/2021 |
| 3 | 03/01/2021 |
輸出將是
| ID | 日期A | 日期B |
|---|---|---|
| 1 | 03/01/2021 | 03/01/2021 |
| 1 | 04/01/2021 | 04/01/2021 |
| 1 | 05/01/2021 | 05/01/2021 |
| 1 | 06/01/2021 | |
| 2 | 04/01/2021 | 04/02/2021 |
| 2 | 05/01/2021 | 05/02/2021 |
| 3 | 03/01/2021 | 03/01/2021 |
| 3 | 04/01/2021 |
基本上,搜索與某個值匹配的所有記錄(例如 1,然后將它們并排列出)
我嘗試使用 id 作為鍵加入他們,但它產生了許多我不想要的其他行。也嘗試過分組,但順序混亂
我正在通過熊貓使用 sqlite
下面的查詢會導致一些額外的行,我無法弄清楚如何過濾掉
SELECT A.id, A.date, B.date
FROM A
JOIN B
ON B.id = A.id
添加 group by 導致表只輸出每個多個的第一條記錄
uj5u.com熱心網友回復:
使用 CTE,您可以按 id 和日期順序對兩個表的所有行進行排名,然后聚合:
WITH cte AS (
SELECT id, date dateA, null dateB, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date) rn
FROM TableA
UNION ALL
SELECT id, null, date, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date) rn
FROM TableB
)
SELECT id, MAX(dateA) dateA, MAX(dateB) dateB
FROM cte
GROUP BY id, rn
ORDER BY id, rn;
請參閱演示。
請注意,您的日期在格式中dd/mm/yyyy,它們不具有可比性。
您應該將它們更改為yyyy-mm-dd以使代碼正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/355907.html
