• 1000 *
В таблице rentals
у вас есть rental_id
для каждой транзакции аренды, inventory_id
, соответствующий элементу, который был взят в аренду, а также rental_date
и return_date
.
Для каждой сделки аренды я хотел бы посмотреть на rental_date
и найти разницу с return_date
предыдущего появления того же inventory_id
.
Я знаю LAG()
и LEAD()
здесь может быть полезно, но я понятия не имею, как заставить его рассматривать только другие строки с тем же inventory_id
.
Пример данных:
rental_id inventory_id rental_date return_date
-------------------------------------------------------
1 115 01-01-2005 01-05-2005
2 209 01-01-2005 01-04-2005
3 115 01-06-2005 01-10-2005
4 209 01-09-2005 01-14-2005
5 209 01-15-2005 01-20-2005
6 115 01-16-2005 01-20-2005
Желаемый результат:
rental_id inventory_id rental_date return_date days_on_shelf
------------------------------------------------------------------------
1 115 01-01-2005 01-05-2005 NULL
2 209 01-01-2005 01-04-2005 NULL
3 115 01-06-2005 01-10-2005 1
4 209 01-09-2005 01-14-2005 5
5 209 01-15-2005 01-20-2005 1
6 115 01-16-2005 01-20-2005 6
Спасибо 7 июня. Правильный код должен выглядеть так:
SELECT
rental.rental_id,
rental.inventory_id,
inventory.film_id,
rental.rental_date,
rental.return_date,
IF(@lastid = rental.inventory_id,
DATEDIFF(rental.rental_date, @lastreturn),
NULL) AS days_on_shelf,
@lastid:=rental.inventory_id,
@lastreturn:=rental.return_date
FROM
rental
JOIN
inventory ON rental.inventory_id = inventory.inventory_id
ORDER BY rental.inventory_id , rental.rental_date