pgsql LEFT JOIN 右表数据不唯一

今天遇上一个类似 mysql left join 右表数据不唯一的情况解决方法 的问题,A表关联B表,B表数据不唯一,希望left join 后,只取B表中时间字段最迟的那条。在sql中,分组再加limit可以解决问题。

但在pgsql中,由于GROUP BY 对字段的限制:在 GROUP BY 子句中,你可以对一列或者多列进行分组,但是被分组的列必须存在于列清单中。详见PostgreSQL GROUP BY 语句。如果对所需要的的查询字段,合起来分组,本身结果就是唯一,得不到想要的结果。
最终利用 DISTINCT ON 完成目标,对B表指定外键去重,ORDER BY 按照外键、时间字段排序。
DISTINCT ON 与 DISTINCT 的区别详见Postgres DISTINCT与DISTINCT ON有什么不同?

你可能感兴趣的:(数据库,pgsql)