繁体   English   中英

并排连接两个表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM