2014-10-26 47 views
2

我試圖獲得客戶,電影和租期逾期的天數(如果租金保持時間超過租期)。如何獲取此查詢中過期的天數?

由於某些原因,我使用此查詢得到的租期過期天數爲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

什麼都是'date'列的數據類型? – Payam 2014-10-26 23:45:00

+0

類型:日期時間,空值:否,鍵:MUL,默認值:NULL – 2014-10-27 00:05:51

回答

1

它返回空的原因是因爲你對那些音符日期值使用DATEDIFF

看這句話就在這裏:

DATEDIFF(DATEDIFF(return_date, rental_date), rental_duration) 

當您執行裏面,你會擁有一個整數(回報和租金的日期之間的差異)。 rental_duration也是一個整數,所以當你嘗試在它們之間做一個datediff時,你會得到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工作臺跑這一點,並取得這樣的結果集: enter image description here

0

如果有用於計算結果的值都爲空,你會得到一個空。

而且,你的表情看起來不正確,請嘗試:

Select ... 
datediff(return_date, rental_date) - rental_duration overdue 
from ... 
... 
where datediff(return_date, rental_date) - rental_duration > 0 
+0

當我嘗試它說在'where子句'中的未知列'逾期' – 2014-10-26 23:26:39

+0

現在我越來越錯誤:BIGINT UNSIGNED值超出範圍 – 2014-10-26 23:33:14

+0

請提供三個列的樣本實際值return_date,rental_date和rental_duration – Bohemian 2014-10-26 23:47:40