Postgresql group by

Добрый день!
Есть таблица order: id | customer_id | created | category_id
Есть запрос select customer_id, date_trunc('day', min(«order».created)) as created from «order» group by 1
Он исправно выбирает те данные, которые надо, собственно, айди юзера с минимальной датой его заказа.
Необходимо вытащить еще category_id
То есть
select customer_id, date_trunc('day', min(«order».created)) as created, category_id from «order» group by 1,3
такой запрос дает побочные строки, надо выбрать category_id того заказа, у которого min(«order».created)
Подскажете как?
  • Вопрос задан
  • 4374 просмотра
Пригласить эксперта
Ответы на вопрос 4
alexius2
@alexius2
Через DISTINCT должно сработать:

select distinct on (customer_id) customer_id, date_trunc('day', «order».created) as created, category_id from «order» order by 1, «order».created DESC
Ответ написан
Комментировать
AxisPod
@AxisPod
group by в данном случае сводит как в бд лежит, я так понимаю, вам наверное надо поглядеть в сторону having. www.postgresql.org/docs/8.1/static/tutorial-agg.html
Ответ написан
Комментировать
@ztxn
выбрать category_id того заказа, у которого min(«order».created)

select customer_id, created, category_id 
from 
  (select customer_id, date_trunc('day', «order».created) as created, category_id 
          ,row_number() over (partition by customer_id order by date_trunc('day', «order».created)) rn
   from «order»)s
where rn = 1
Ответ написан
Комментировать
kuzemchik
@kuzemchik
select distinct on(customer_id) customer_id,category_id,date_trunc('day', min(created)) as createdon from testtable group by customer_id,category_id order by customer_id,createdon
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы