我想要匹配的 MySQL 資料庫中有兩個表。
表格1
----- ------------ ------ ------- ------
| ID1 | Date1 | Var1 | Group | Var2 |
----- ------------ ------ ------- ------
| 21 | 2021-08-20 | 2 | A | 2 |
| 20 | 2020-11-06 | 2 | A | 6 |
| 23 | 2021-04-13 | 6 | B | 4 |
| 22 | 2020-05-10 | 7 | C | 9 |
| 25 | 2021-09-23 | 4 | C | 1 |
----- ------------ ------ ------- ------
表 2
----- ------------ ------ -------
| ID2 | Date2 | VarZ | Group |
----- ------------ ------ -------
| 6 | 2021-12-29 | 2 | C |
| 4 | 2022-01-15 | 2 | A |
| 5 | 2019-08-02 | 6 | B |
| 9 | 2021-05-02 | 7 | C |
----- ------------ ------ -------
我正在嘗試創建表 3,這是按組合并表 1 和表 2 的結果,表 1 中的 OLDEST 案例與表 2 中的 OLDEST 案例合并,每個案例僅按時間順序合并 1 個;案例合并后,不應重新評估以進行另一次合并。最終結果將類似于以下內容:
表3
----- ------------ ------ ------- ------ ----- ------------ ------ -------
| ID1 | Date1 | Var1 | Group | Var2 | ID2 | Date2 | VarZ | Group |
----- ------------ ------ ------- ------ ----- ------------ ------ -------
| 20 | 2020-11-06 | 2 | A | 6 | 4 | 2022-01-15 | 2 | A |
| 23 | 2021-04-13 | 6 | B | 4 | 5 | 2019-08-02 | 6 | B |
| 22 | 2020-05-10 | 7 | C | 9 | 9 | 2021-05-02 | 7 | C |
| 25 | 2021-09-23 | 4 | C | 1 | 6 | 2021-12-29 | 2 | C |
----- ------------ ------ ------- ------ ----- ------------ ------ -------
如您所見,表 1 中只有一個 A 組案例將被合并,因為表 1 中具有 A 組的第二個案例在表 2 中沒有任何對應項。
這本質上是將表 1 中的案例與表 2 中的案例進行匹配,其中每個案例僅匹配一次,匹配按日期排序,未匹配的案例不會出現在最終表格中。
我正在將 python 與 MySQL 一起使用。我嘗試使用內部聯接和按日期變數排序,但無濟于事,因為如果另一個表中存在多個表,我會從一個表中獲取重復的情況。非常感謝任何幫助。
uj5u.com熱心網友回復:
您需要ROW_NUMBER()視窗函式來對Group兩個表中的每個行進行排名,以便您根據該排名加入它們,并且Group:
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY `Group` ORDER BY Date1) rn FROM table1) t1
JOIN (SELECT *, ROW_NUMBER() OVER (PARTITION BY `Group` ORDER BY Date2) rn FROM table2) t2
ON t2.`Group` = t1.`Group` AND t2.rn = t1.rn;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/459461.html
標籤:mysql python-3.x 加入 窗函数
