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

i2byvkas  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(298)

我正在与萨基拉视频租赁数据库来预装mysql的工作。
我试图找到平均天数每个视频坐在货架上,然后再租。
rentals 你有table吗 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

感谢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
a2mppw5e

a2mppw5e1#

你好像只是想 lag() :

select t.*,
       datediff(rental_date,
                lag(return_date) over (partition by inventory_id order by rental_date)
               ) as days_on_shelf
from t

相关问题