Mysql 如何从另一列中减去一列,找到相同id的上一个匹配项?
我正在使用MySQL预装的Sakila视频租赁数据库 我试图找到平均天数每一个视频坐在货架上,然后再租用 在Mysql 如何从另一列中减去一列,找到相同id的上一个匹配项?,mysql,sql,datetime,Mysql,Sql,Datetime,我正在使用MySQL预装的Sakila视频租赁数据库 我试图找到平均天数每一个视频坐在货架上,然后再租用 在rentals表中,您有每个租赁交易的rental\u id,对应于租赁物品的库存id,以及租赁日期和退货日期 对于每笔租赁交易,我希望查看租赁日期,并找出与上次相同库存id的退货日期的差异 >我知道 Re>(代码)>和引号()/代码>在这里可能有用,但我不知道如何仅用同一个代码来考虑其他行。 样本数据: rental_id inventory_id rental_date ret
rentals
表中,您有每个租赁交易的rental\u id
,对应于租赁物品的库存id
,以及租赁日期
和退货日期
对于每笔租赁交易,我希望查看租赁日期
,并找出与上次相同库存id
的退货日期
的差异
>我知道<代码> Re>(代码)>和<代码>引号()/代码>在这里可能有用,但我不知道如何仅用同一个代码来考虑其他行。 样本数据:
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
谢谢你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
您似乎只是想要
lag()
:
您似乎只是想要
lag()
:
@六月七日是的!这正是我要找的!有时解决问题最难的部分是正确地表述问题。指定的副本不合适,因为MySQL现在支持窗口函数。@June7 Yes!这正是我要找的!有时解决问题最难的部分是正确地表述问题。指定的副本不合适,因为MySQL现在支持窗口函数。是的!这比6月7日提供的解决方案更简单。我不知道如何结合
滞后
和分区
,但现在一切都有意义了。是的!这比6月7日提供的解决方案更简单。我不知道如何组合滞后
和分区
,但现在一切都有意义了。
select t.*,
datediff(rental_date,
lag(return_date) over (partition by inventory_id order by rental_date)
) as days_on_shelf
from t