Mysql 如何从另一列中减去一列,找到相同id的上一个匹配项?

Mysql 如何从另一列中减去一列,找到相同id的上一个匹配项?,mysql,sql,datetime,Mysql,Sql,Datetime,我正在使用MySQL预装的Sakila视频租赁数据库 我试图找到平均天数每一个视频坐在货架上,然后再租用 在rentals表中,您有每个租赁交易的rental\u id,对应于租赁物品的库存id,以及租赁日期和退货日期 对于每笔租赁交易,我希望查看租赁日期,并找出与上次相同库存id的退货日期的差异 >我知道 Re>(代码)>和引号()/代码>在这里可能有用,但我不知道如何仅用同一个代码来考虑其他行。 样本数据: rental_id inventory_id rental_date ret

我正在使用MySQL预装的Sakila视频租赁数据库

我试图找到平均天数每一个视频坐在货架上,然后再租用

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