【发布时间】:2016-07-22 04:27:13
【问题描述】:
我正在尝试编写一个查询,该查询将返回 Sakila 数据库中最长的电影租借时间和租借该电影的客户(以及电影的标题)。
作为第一步,我编写了以下查询,它应该返回film_id、inventory_id、customer_id 和最长租期(以周为单位):
SELECT DDIFF.*
FROM (SELECT rental.inventory_id, rental.customer_id, DATEDIFF(rental.return_date, rental.rental_date)/7 AS TM FROM rental) AS DDIFF
INNER JOIN (SELECT DDIFF.inventory_id, DDIFF.customer_id, MAX(DDIFF.TM) AS WEEKS
FROM (SELECT rental.inventory_id, rental.customer_id, DATEDIFF(rental.return_date, rental.rental_date)/7 AS TM FROM rental) AS DDIFF
GROUP BY DDIFF.inventory_id, DDIFF.customer_id) AS MXLST
ON DDIFF.TM = MXLST.WEEKS AND MXLST.inventory_id = DDIFF.inventory_id AND MXLST.customer_id = DDIFF.customer_id
;
但我得到了一些意想不到的结果(它应该返回 multiple 行,最长持续时间为 1.4286 周,但由于某种原因我得到了 1.0 周)。我究竟做错了什么?如果能听到解释,我将不胜感激。
请注意,我已尝试按照 this 和 this 正确使用 MAX() 但它仍然没有返回正确的结果。
编辑:Sakila 表的结构可以在here找到
【问题讨论】:
-
请添加表格结构
-
@juergend 完成,查看我的编辑。
-
你的 SQL 比我想象的更高级,所以我推测原因是 1)结果被四舍五入到最接近的整数或 2)结果被写入期望整数的列/变量仅限。
-
@fiprojects 我不认为是这样,因为我发现结果列表中不应该出现的人的名字。尽管如此,还是感谢您的意见。
标签: mysql