Как выбрать 1 строку идентификатора, исходя из условия минимальной даты (пересечение или игнорирование других столбцов)? - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу выбрать тех покупателей, у которых была их первая покупка и категория первой покупки.

Вот примерные данные:

ID   Category  Buy_date
1    Car       2019-01-01
1    Truck     2019-01-02
1    House     2019-01-03
1    House     2019-01-04

2    Car      2019-01-01
2    Car      2019-01-02
2    Truck    2019-01-03

Мой ожидаемый результат:

ID   Category    Buy_date
1    Car         2019-01-01
2    Car         2019-01-01

Мой код:

select ID, category, min(buy_date) over (partition by id) from #a group by 1,2

Вот неправильный результат:

ID    Category    Buy_date
1     Car         2019-01-01
1     Truck       2019-01-01
1     House       2019-01-01

2     Car         2019-01-01
2     Truck       2019-01-01

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Если вы хотите одну строку на id, используйте distinct on:

select distinct on (id) a.*
from a
order by id, buy_date asc;
1 голос
/ 12 февраля 2020

Попробуйте это:

select id, category, buy_date from test as outer_tab where buy_date = (select min(buy_date) from test where id = outer_tab.id);

...