[英]How do I select datediff between a date and time column and a date column from two different tables in MySQL?
所以我有這兩個數據表,用戶和登錄名。 有一個用於用戶的registration_date
列和一個用於登錄的last_login
。 我試圖從兩個表中找到兩列之間的平均差異。 我認為問題在於, registration_date
只是日期,而last_login
既是日期和時間。
我首先嘗試:
select avg(datediff(u.registration_date, l.last_login)) as avg_acttime from logins l
left join users u on l.userid = u.id and type like '%new%';
我的結果為null
。
因此,我然后嘗試將日期和時間last_login
列轉換為date。
select avg(datediff((DATE_FORMAT(u.registration_date,'%d-%m-%y')), (DATE_FORMAT(l.last_login,'%d-%m-%y')))) as avg_acttime from logins l
left join users u on l.userid = u.id and type like '%new%';
結果再次為null
。 我需要一些認真的幫助,以使一個表中的此日期列與另一表中的日期和時間列之間的天差。
這個評論太長了。 首先,我認為您打算讓users
成為第一個表。 然后,您不需要left join
,因為avg()
始終會忽略NULL
值。 因此,一個join
就足夠了:
select avg(datediff(u.registration_date, l.last_login)) as avg_acttime
from users u join
logins l
on l.userid = u.id and type like '%new%';
您可能會得到NULL
值,因為沒有由from
子句生成的行,或者所有行的其中一列都具有NULL
值。 更具體地說,我可以想到以下可能性:
logins
或users
沒有行。 on
條件。 u.registration_date
和l.last_login
中至少有一個始終為NULL
。 具有datetime
和date
不應導致NULL
值。
其中,我猜沒有行與on
條件匹配。 type
比較是最可能的失敗原因。 沒有樣本數據,很難說更多。
日期格式%d-%m-%y
會產生非常奇怪的結果,如果有的話。 將%d-%m-%y
更改為
%Y-%m-%d
注意大寫的Y
,否則mysql將用2位數字表示年份的日期格式,然后他會將其與日期混淆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.