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

标签 mysql sql date

所以我有这两个数据表,用户和登录名。有一个用于用户的 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 值的列。更具体地说,我可以想到以下可能性:

  • loginsusers 没有行。
  • 没有行与 on 条件匹配。
  • 每次登录时,u.registration_datel.last_login 至少其中之一始终为 NULL

拥有日期时间日期不应导致NULL值。

其中,我的猜测是没有行与 on 条件匹配。 type 比较是最有可能失败的原因。没有样本数据,很难说更多。

关于mysql - 如何在 MySQL 中两个不同表的日期和时间列以及日期列之间选择 datediff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44684066/

相关文章:

mysql - 无需任何键即可连接两个表

mysql - 如何从数据库中选择前 10 个值并将其存储在 PHP 变量中

php - 如何将元素添加到 php 数组而不显示为新数组

SQL - 在 A-F 之间查找名称的条件

java - 将日期转换为全文

php - MySql 在选择查询中返回不正确的日期值

php - 在PHP中,如何在表格中显示数组内容

java - 注解@Id和@GenerateValue(strategy = GenerationType.IDENTITY)有什么用?为什么世代类型是身份?

python - 更改文件创建日期

sql - 如何使用 sql case 语句重新创建此逻辑