我正在做一個查詢,我應該結合2個表,并獲得每個用戶作為一個單獨的條目(用戶不應該是重復的)。對于日期,我需要從這兩個表中獲取最新的資料
。表1
表2
實際輸出 我的postgraphion(資料包) 我的 postgresql 我嘗試了很多方法,但都沒有成功。在做聯合時,資料是重復的。誰能幫幫我呢 uj5u.com熱心網友回復: 使用UNION ALL合并兩個表,然后應用ROW_NUMBER()來序列化帶有降序日期的user_id的值。然后通過使用CTE檢索最后的記錄。使用UNION ALL來避免額外的排序。
還有一種方法是不用CTE做同樣的事情
標籤:
user_id name date
----------------------------------
1 John 20201029 --最新日期-
2 Tom 20201115 --最新日期--。
3 Peter 20201210 --最新日期--。
SELECT user_id, name, date
from
table_1
UNION[/span
SELECT user_id, name, date
FROM[/span
table_2
-- PostgreSQL
WITH c_cte AS (
SELECT t.*
, ROW_NUMBER() OVER (PARTITION BY t. user_id ORDER BY t.date DESC) row_num
FROM (SELECT user_id, name, date)
FROM table_1
UNIONALL
SELECT user_id, name, date
FROM table_2) t
)
SELECT user_id, name, date
FROM c_cte
WHERE row_num = 1
ORDER BY user_id
SELECT u.user_id, u.name, u.date
FROM (SELECT t.*)
, ROW_NUMBER() OVER (PARTITION BY t. user_id ORDER BY t.date DESC) row_num
FROM (SELECT user_id, name, date)
FROM table_1
UNIONALL
SELECT user_id, name, date
FROM table_2) t
) u
WHERE u.row_num = 1
ORDER BY u.user_id


