如何在连接后对多列进行区分,然后为每个组排序并选择最新的?

use*_*355 5 sql postgresql scala slick

我有这3张桌子。鉴于Group Name我想找到Product Table该组的所有产品,然后从Version table

产品组表

id  group_name
---------------------------
1   Nice
2   Very Nice
Run Code Online (Sandbox Code Playgroud)

产品表

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

Run Code Online (Sandbox Code Playgroud)

版本表

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

Run Code Online (Sandbox Code Playgroud)

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

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

Run Code Online (Sandbox Code Playgroud)

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

Tim*_*sen 4

使用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;
Run Code Online (Sandbox Code Playgroud)

下面的演示链接的屏幕截图

演示