0

Having this table:

warehouse_id destination_id days
1 1 2
1 1 3
2 1 3
2 1 4
3 1 5
3 2 5
1 2 2
2 2 3

I'd like to get the warehouse_id and days for each value of warehouse_id, where the row has the minimum value of days, and destination_id matches a specific value, ordered by days.

For example for destination_id = 1

warehouse_id days
1 2
2 3
3 5
2
2

Here is the query which orders by first for warehouse_id and days then gets first record only according to DISTINCT ON clause

select distinct on (warehouse_id) 
    warehouse_id,
    days 
  from this_table 
  where destination_id = 1 
  order by warehouse_id, days 
warehouse_id | days
-----------: | ---:
           1 |    2
           2 |    3
           3 |    5

db<>fiddle here

0
0

A simple aggregation like

select warehouse_id, min(days)
from this_table
where destination_id = 1
group by warehouse_id;

gives the answer in the question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.