Postgresql get rows based on minimum value 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
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&lt;&gt;fiddle here