[英]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.