如何在MySQL的两个不同表中选择日期和时间列和日期列之间的datediff?

问题描述:

所以我有这两个数据表,用户和登录。有一个registration_date列的用户和last_login登录。我试图从两张表中找出两列之间的平均差异。我认为是问题的是registration_date只是日期,而last_login是日期和时间。如何在MySQL的两个不同表中选择日期和时间列和日期列之间的datediff?

我第一次尝试:

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列转换为日期。

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条件。比较是最可能导致失败的原因。没有样本数据,很难说更多。

+0

权利,但很奇怪的唯一的事情是,当我做 – evkyee

+0

选择AVG(DATEDIFF(l.last_login,u.datesent))从字母L “avg_signupdate-datesent_hrs” \t左加入用户U ON l.userid = u.id并键入'%new%'; – evkyee

+0

它出来正确,所以上的条件似乎工作正常。这使我相信它与日期栏中使用的日期和时间有关。 idk寿 – evkyee

您的日期格式%d-%m-%y将产生非常奇怪的结果,如果有的话。 更改%d-%m-%y

%Y-%m-%d 

心灵资本Y,否则MySQL将有2个位数的一年,他会再与天混淆格式化日期。