并排连接两个表
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
以使代码正常工作。
我有这两个 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
以使代码正常工作。