could anyone help me please? I have two tables: Prices and Intervals:
Prices: Intervals:
Price Interval_bound Category
16 5 cheap
11 10 cheap
9 15 median
26 20 median
6 25 expensive
I need to join the Category values to the Price according to their interval, where Interval_bound is the lowest bound of category:
Price Category
16 median
11 cheap
9 cheap
26 expensive
6 cheap
I've tried to do it with
select Price, Category from Prices
left join Intervals on Prices.Price interpolate previous value Interval.Interval_bound
but it gives me only NULL for Category. How can I do it the easiest way? I'm using Vertica.
You can use lead()
to get the next upper bound and then join
:
select p.Price, i.Category
from Prices p left join
(select i.*,
lead(interval_bound) over (order by interval_bound) as next_interval_bound
from Intervals i
) i
on p.price >= i.interval_bound and
(p.price < i.next_interval_bound or i.next_interval_bound is null);