Как сделать различия по нескольким столбцам после объединения, а затем сортировать и выбирать последние для каждой группы? - PullRequest
2 голосов
/ 27 апреля 2020

У меня есть эти 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 таблицы, а затем различить, а затем отсортировать по des c и выбрать первый. Но в итоге я получаю 1 вместо вышеуказанного результата. Хотите знать, как будет выглядеть запрос sql? если это имеет значение, я использую PostgreSQL, Scala / Slick.

1 Ответ

3 голосов
/ 27 апреля 2020

Использование 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

Демо

...