繁体   English   中英

如何从另一列中减去一列以查找上一次出现的相同 id?

[英]How to subtract one column from another column finding the previous occurrence of the same id?

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

我试图找出每个视频在再次租用之前放在架子上的平均天数。

rentals表中,您有每个租赁交易的rental_id 、与所租物品相对应的inventory_id ,以及rental_datereturn_date

对于每笔租赁交易,我想查看rental_date并找出与上一次出现相同inventory_idreturn_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM