1

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 Answers 2

3

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 and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.