比较来自两个数据库的日期时间/时间戳值以进行员工调度(MySQL)

时间:2015-12-08 13:57:56

标签: mysql sql database datetime join

我的目标是将一个数据库中的员工日程表与另一个数据库中的实际时钟表进行比较。

这是我开始时的查询,只是在搜索时钟输入数据库时​​找到一个单一的时钟输入时间:

SELECT *
FROM `users_log`
WHERE `user` = 'Employee'
AND `type` = 'Login'
ORDER BY ABS(`logintime` - UNIX_TIMESTAMP(`scheduled_logintime_from_2nd_database`)))
LIMIT 1

不确定最佳方法(特别是因为在子查询中使用ORDER BY是iffy)。但最终我想要某种父查询/连接来加入员工姓名(user)上的两个数据库,并显示两个数据库的预定登录时间和实际登录时间。

在上面的示例中,对于scheduled_logintime_from_2nd_database,我只是使用文本字符串进行测试,最终这将是来自其他数据库的实际列。 (注意一个是时间戳,另一个是日期时间,因此是UNIX_TIMESTAMP函数)。

1 个答案:

答案 0 :(得分:1)

你非常接近。

我建议你按照以下步骤进行:

首先,执行适当的JOIN操作以将两个数据源收集在一起。像这样:

      SELECT DATE(ul.logintime) day,
             ul.name, ul.logintime,
             UNIX_TIMESTAMP(sch.scheduled_logintime) sched_time
       FROM users_log ul
       JOIN schedule sch  ON ul.name = sch.name
                         AND DATE(ul.logintime) = DATE(sch.scheduled_logintime)

这应该为您提供一堆行,每天一个或多个行和用户,显示计划和实际时间。

然后你可以使用它作为子查询,也许做这样的事情:

 SELECT name, day,
        MAX(ABS(logintime - sched_time)),
        MIN(ABS(logintime - sched_time))
   FROM ( SELECT DATE(ul.logintime) day,
             ul.name, ul.logintime,
             UNIX_TIMESTAMP(sch.scheduled_logintime) sched_time
       FROM users_log ul
       JOIN schedule sch  ON ul.name = sch.name
                         AND DATE(ul.logintime) = DATE(sch.scheduled_logintime)
        )
  GROUP BY name, day

这应该会给你每个名字在每天最好和最差的时间表。