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

问题描述 投票:0回答:1

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

获取最新版本

产品组表

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

产品表

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

版本表

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个表进行Join,然后在上进行区分,然后按desc排序并选择第一个。但是我最终只得到1而不是上面的结果。想知道sql查询是什么样子?如果有问题,我正在使用PostgreSQL,Scala / Slick。

sql postgresql scala slick
1个回答
0
投票

使用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;

screen capture of demo link below

Demo

© www.soinside.com 2019 - 2024. All rights reserved.