我正在尝试获取客户,电影及其租借逾期天数的清单(如果租金保留的时间超过租期)。
出于某种原因,我使用此查询获得的租借天数为NULL。
我从这个资源中得到了表格:
http://dev.mysql.com/doc/sakila/en/sakila-structure-tables.html
这是我的问题:
SELECT first_name, last_name, title, DATEDIFF(DATEDIFF(return_date,rental_date), rental_duration)
FROM sakila_customer
JOIN sakila_rental USING (customer_id)
JOIN sakila_inventory USING (inventory_id)
JOIN sakila_film USING (film_id)
WHERE sakila_film.rental_duration < DATEDIFF(sakila_rental.return_date,sakila_rental.rental_date);
答案 0 :(得分:1)
它返回null的原因是因为您在注释日期的值上使用DATEDIFF
。
请看这一行:
DATEDIFF(DATEDIFF(return_date, rental_date), rental_duration)
执行内部(返回和租赁日期之间的差异)时,您将获得一个整数。 rental_duration也是一个整数,所以当你试图在它们之间做一个约会时你会得到null,因为你没有考虑日期的差异。
所以你应该做的是获得退货和租赁日期的日期,然后从中减去租赁期限。该号码将为您提供逾期的日期数。
试试这个:
SELECT first_name, last_name, title, (DATEDIFF(return_date, rental_date) - rental_duration) AS daysOverdue
FROM customer
JOIN rental USING (customer_id)
JOIN inventory USING (inventory_id)
JOIN film USING (film_id)
WHERE rental_duration < DATEDIFF(return_date, rental_date);
我从您的链接下载了数据库,并在MySQL工作台中运行了该数据库,并实现了以下结果集:
答案 1 :(得分:0)
如果用于计算结果的任何值都为null,则会得到null。
另外,你的表情看起来并不正确,请尝试:
Select ...
datediff(return_date, rental_date) - rental_duration overdue
from ...
...
where datediff(return_date, rental_date) - rental_duration > 0