Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Группировка по полю и сортировка по полю другого / 5 сообщений из 5, страница 1 из 1
05.11.2019, 17:22
    #39885375
MichaelKr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по полю и сортировка по полю другого
Добрый день!
Проблема состоит в следующем:
Есть таблица Order (Заказ) со столбцом Customer_ID, со ссылкой на другую таблицу Customer.
Нужно для каждого Customer'а выводить информацию только из последнего Order_ID, соответствующего данному customer'у.
Время создания заказа можно определить по столбцу o.create_ts
Иначе запрос:
Код: plsql
1.
2.
3.
select c.id, c.name, o.price, o.name
from Customer c
inner join Order o on o.customer_id = c.id


Такой запрос для каждого кастомера выдает все заказы, ссылающееся на него. Как перед выводом забирать только последний по времени create_ts заказ для каждого кастомера?
Пробовал различные вариации с group by и order by - к сожалению ничего.
...
Рейтинг: 0 / 0
05.11.2019, 17:34
    #39885380
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по полю и сортировка по полю другого
MichaelKr,

Код: sql
1.
2.
select ... from Customer c
join lateral (select .. from  Order o where o.customer_id = c.id order by create_ts desc limit 1) on true
...
Рейтинг: 0 / 0
05.11.2019, 17:39
    #39885383
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по полю и сортировка по полю другого
MichaelKr
Добрый день!
Проблема состоит в следующем:
Есть таблица Order (Заказ) со столбцом Customer_ID, со ссылкой на другую таблицу Customer.
Нужно для каждого Customer'а выводить информацию только из последнего Order_ID, соответствующего данному customer'у.
Время создания заказа можно определить по столбцу o.create_ts
Иначе запрос:
Код: plsql
1.
2.
3.
select c.id, c.name, o.price, o.name
from Customer c
inner join Order o on o.customer_id = c.id


Такой запрос для каждого кастомера выдает все заказы, ссылающееся на него. Как перед выводом забирать только последний по времени create_ts заказ для каждого кастомера?
Пробовал различные вариации с group by и order by - к сожалению ничего.


select distinct on c.id c.id, c.name, o.price, o.name
from Customer c
inner join Order o on o.customer_id = c.id
order by c.id, o.create_ts DESC;

как второй вариант...
что будет быстрее distinct on или lateral - сильно зависит от соотношения размеров таблиц и наличных индексов.
...
Рейтинг: 0 / 0
05.11.2019, 17:55
    #39885388
MichaelKr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по полю и сортировка по полю другого
Maxim Boguk,
Есть еще один нюанс, этот запрос мне скорее всего нужно будет реализовать на JPQL, а там не работает limit..
Попробую Ваш вариант
...
Рейтинг: 0 / 0
05.11.2019, 18:08
    #39885395
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по полю и сортировка по полю другого
MichaelKr
Maxim Boguk,
Есть еще один нюанс, этот запрос мне скорее всего нужно будет реализовать на JPQL, а там не работает limit..
Попробую Ваш вариант


тогда и distinct ON скорее всего не будет работать...
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Группировка по полю и сортировка по полю другого / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]