如何在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
值。更具体地说,我可以想到以下可能性:
-
logins
或users
没有行。 - 没有行匹配
on
条件。 - 对于每次登录,
u.registration_date
和l.last_login
中的至少一个始终为NULL
。
有一个datetime
和date
不应导致NULL
值。
其中,我的猜测是没有行匹配on
条件。比较是最可能导致失败的原因。没有样本数据,很难说更多。
答
您的日期格式%d-%m-%y
将产生非常奇怪的结果,如果有的话。 更改%d-%m-%y
到
%Y-%m-%d
心灵资本Y
,否则MySQL将有2个位数的一年,他会再与天混淆格式化日期。
权利,但很奇怪的唯一的事情是,当我做 – evkyee
选择AVG(DATEDIFF(l.last_login,u.datesent))从字母L “avg_signupdate-datesent_hrs” \t左加入用户U ON l.userid = u.id并键入'%new%'; – evkyee
它出来正确,所以上的条件似乎工作正常。这使我相信它与日期栏中使用的日期和时间有关。 idk寿 – evkyee