所以我有这两个数据表,用户和登录名。有一个用于用户的 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
列转换为日期。
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
作为第一个表。然后,您不需要 左连接
,因为 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
。
拥有日期时间
和日期
不应导致NULL
值。
其中,我的猜测是没有行与 on
条件匹配。 type
比较是最有可能失败的原因。没有样本数据,很难说更多。
关于mysql - 如何在 MySQL 中两个不同表的日期和时间列以及日期列之间选择 datediff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44684066/