并排连接两个表

Join two tables side by side

我有这两个 table我需要并排加入

Table一个

id date
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

Table B

id date
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 dateA dateB
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 作为键加入他们,但它产生了许多我不想要的其他行。也尝试过分组,但它弄乱了顺序

我正在通过 pandas

使用 sqlite

下面的查询导致返回一些额外的行,我不知道如何过滤掉这些行

SELECT 
    A.id, A.date, B.date 
FROM 
    A 
JOIN 
    B ON B.id = A.id

添加分组依据导致 table 仅输出每个多组的第一条记录

使用 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;

参见demo

请注意,您的日期采用 dd/mm/yyyy 格式,因此无法比较。
您应该将它们更改为 yyyy-mm-dd 以使代码正常工作。