[英]How to subtract one column from another column finding the previous occurrence of the same id?
我正在使用预装了 MySQL 的 Sakila 视频租赁数据库。
我试图找出每个视频在再次租用之前放在架子上的平均天数。
在rentals
表中,您有每个租赁交易的rental_id
、与所租物品相对应的inventory_id
,以及rental_date
和return_date
。
对于每笔租赁交易,我想查看rental_date
并找出与上一次出现相同inventory_id
的return_date
的差异。
我知道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
所需的 output:
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
谢谢June7。 正确的代码应如下所示:
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
您似乎只想要lag()
:
select t.*,
datediff(rental_date,
lag(return_date) over (partition by inventory_id order by rental_date)
) as days_on_shelf
from t
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.