簡體   English   中英

如何從MySQL中兩個不同的表的日期和時間列與日期列之間選擇datediff?

[英]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值。 更具體地說,我可以想到以下可能性:

  • loginsusers沒有行。
  • 沒有行匹配on條件。
  • 對於每次登錄, u.registration_datel.last_login中至少有一個始終為NULL

具有datetimedate不應導致NULL值。

其中,我猜沒有行與on條件匹配。 type比較是最可能的失敗原因。 沒有樣本數據,很難說更多。

日期格式%d-%m-%y會產生非常奇怪的結果,如果有的話。 %d-%m-%y更改為

%Y-%m-%d

注意大寫的Y ,否則mysql將用2位數字表示年份的日期格式,然后他會將其與日期混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM