2016-11-26 3 views
0

Мне нужно выбрать минимальную дату и сумму из этой таблицы, как это сделать?Как выбрать минимальную дату и total_sales из этой таблицы?

Table: 

|user_id |date  |amount   | 
---------+-----------+---------------- 
|1  |2014-08-19 | 1000 
|2  |2014-12-04 | 20000 
|2  |2014-01-09 | 21000 
|1  |2015-02-26 | 6000 
|2  |2015-03-15 | 27000 
|1  |2015-10-26 | 8000 

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

|user_id |date  |amount   | 
---------+-----------+---------------- 
|1  |2014-08-19 | 1000 
|2  |2014-12-04 | 20000 
+0

Вы запрашиваете помощь для Amazon Redshift, или для PostgreSQL? Ответ зависит от базы данных. –

+0

@JohnRotenstein Redshift – Fahd

+0

Вы упомянули, что хотите * «минимальную дату и сумму» *, но 'user_id' 2 имеет минимальную дату' 2014-01-09', но ожидаемый результат показывает '2014-12-04 '. Вы действительно говорите, что хотите отобразить одну строку для каждого пользователя, где сумма является наименьшей для этого пользователя, а дата равна той же строке, что и минимальная сумма? –

ответ

1

В Postgres, используйте distinct on

select distinct on (user_id) t.* 
from t 
order by user_id, date asc; 

distinct on возвращает одну строку для каждой комбинации клавиш в скобки список. Ключи в списке должны быть первыми ключами для заказа. Запрос возвращает найденную первую строку. В этом случае тот, который имеет минимум date (на основании date).

Если RedShift не поддерживает distinct on, а затем просто использовать оконные функции:

select t.* 
from (select t.*, 
      row_number() over (partition by user_id order by date) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
+0

Спасибо, Гордон, вы тоже знаете, как это сделать в Amazon Redshift? – Fahd

+0

Спасибо, Гордон !!! – Fahd

Смежные вопросы