如何在加入后对多列进行区分,然后对每个组进行排序和 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;
我有这 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;