繁体   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