[英]Join two tables side by side
我有这两个表需要并排连接
表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 导致表只输出每个多个的第一条记录
使用 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
以使代码正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.