如何在加入后对多列进行区分,然后对每个组进行排序和 select 最新?

How to do distinct on multiple columns after join and then sort and select latest for each group?

我有这 3 个 table。给定 Group Name 我想从 Product Table 中找到该组的所有产品,然后从 Version table

中获取最新版本

产品组Table

id  group_name
---------------------------
1   Nice
2   Very Nice

产品table

prod_id  name      group_id
---------------------------
1       something     2
2       psp3          1
3.      other one     2

版本Table

id  prod_id    version
---------------------------
1   2           1.0
2   2           1.1
3   3           2.3
4   1           0.1
5.  1           0.2

例如给定组名 Very Nice,我期望的输出是

Group_name  prod_name    version
---------------------------------
Very Nice   something     0.2
Very Nice   other one     2.3

我试图对所有 3 个 table 进行 Join,然后将其区分,然后按 desc 和 select 第一个进行排序。但我最终只得到 1 而不是上面的结果。想知道 sql 查询会是什么样子?如果重要的话我正在使用 PostgreSQL,Scala/Slick.

使用DISTINCT ON:

SELECT DISTINCT ON (pg.id, p.prod_id)
    pg.group_name, p.name AS prod_name, v.version
FROM product_group pg
LEFT JOIN product p ON pg.id = p.group_id
LEFT JOIN version v ON v.prod_id = p.prod_id
ORDER BY pg.id, p.prod_id, v.version DESC;

Demo