The table rental of movies has this data:
x
rental_id rental_ts inventory_id customer_id return_ts
11909 2/14/2020 871 474 3/15/2020
12222 2/14/2020 3949 22 4/18/2020
how to generate pairs of :
first rental_ts, second rental date,
second rental, third rental date, ….
second LAST rental date, last rental date,
last rental date, null?
using window functions- this is not working:
select
customer_id,
rental_ts as first_rental_date ,
lead(rental_ts) over(partition by customer_id order by rental_ts) as second_rental_date,
lead(lead(rental_ts) over(partition by customer_id order by rental_ts)) as third_rental_date
from rental
i expect:
customer_id , rental_date, second_rental_date, third_rental_date second_last_rental_date, last_rental_date
1 2/14/2020 1/14/2020 12/13/2019 12/13/2019
2 5/16/2020 5/13/2020 5/07/2020 4/29/2020
basically i need more than 1 level back – but dont know how to use it, i only used 1 lead() or lag() at work to compare current and previous dates
Advertisement
Answer
Don’t you need to use dynamic pivot? But if you want it this way then you can use lead(rental_ts,2), lead(rental_ts,3) etc…
select
customer_id,
rental_ts as first_rental_date ,
lead(rental_ts) over(partition by customer_id order by rental_ts) as second_rental_date,
lead(rental_ts,2) over(partition by customer_id order by rental_ts) as third_rental_date
from rental