You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何合并两个表实现用户去重并获取最新日期

问题原因

你原来使用的UNION只会移除所有字段完全相同的重复行,如果同一个user_id在两个表中对应的date不同,或者同个表内同一个用户有多条不同日期的记录,就会出现多行重复用户数据,不符合需求。

解决方案

方案1:分组聚合(通用SQL写法)

如果确认同一个user_id对应的name完全一致,可以用分组取最大值的写法:

SELECT 
  user_id,
  MAX(name) AS name,
  MAX(date) AS date
FROM (
  SELECT user_id, name, date FROM table_1
  UNION ALL
  SELECT user_id, name, date FROM table_2
) AS combined
GROUP BY user_id
ORDER BY user_id;

这里用UNION ALL代替UNION,因为我们后续会做分组聚合,不需要提前去重,查询性能更高。

方案2:PostgreSQL特有DISTINCT ON写法

如果需要保证name是最新日期对应的那一条数据的取值,用PostgreSQL原生的DISTINCT ON语法更简洁精准:

SELECT DISTINCT ON (user_id)
  user_id,
  name,
  date
FROM (
  SELECT user_id, name, date FROM table_1
  UNION ALL
  SELECT user_id, name, date FROM table_2
) AS combined
ORDER BY user_id, date DESC;

DISTINCT ON (user_id)会为每个唯一的user_id保留一行结果,结合ORDER BY里的date DESC,自动取日期最新的那条记录的所有字段,不会出现name和最新日期不匹配的问题。

内容的提问来源于stack exchange,提问作者M.N. Waleedh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:27:02